Problema 1: Burbujas especulativas y la crisis inmobiliaria en Estados Unidos

Preguntas del caso:

A. Toma la perspectiva de la Reserva Federal estadunidense (i.e. Banco Central). Define el problema que este tipo de burbujas representan para esta institución. Recuerda, la descripción del problema debe enfatizar la existencia de una brecha entre la situación actual y el estado futuro deseable para la institución. Investiga acerca de las funciones y objetivos de la reserva federal y de las políticas que puede implementar para intervenir en los mercados con el fin de mitigar o evitar los efectos negativos de las burbujas financieras.

R: La Reserva Federal estadounidense trabaja para mantener la estabilidad en la economía de este país a través de la política monetaria. Específicamente, los objetivos que se persiguen con la aplicación de la política monetaria son:

  • Tener el mayor nivel de empleo que el país pueda sostener manteniendo la inflación estable, y
  • tener estabilidad en los precios, de forma que tanto personas como negocios no se preocupen por precios alcistas o bajistas al momento de hacer planes.

Relacionando los pricnipales objetivos de la Fed con las burbujas especulativas, se puede decir que las burbujas especulativas generan alta inestabilidad en la economía de EEUU. Esto debido a que las burbujas especulativas, al reventar, impactan a personas y a empresas que deciden invertir tarde en los activos cuyos precios son afectados por la burbuja (bienes raíces en el caso de la crisis inmobiliaria). El colapso inevitable de las burbujas de activos desploma el valor neto de los inversionistas, y esto ocasiona que las empresas expuestas quiebren y que además se genere un espiral de deflación de la deuda en el cual los precios de los bienes y los salarios se reducen, pero los pagos de intereses en tasas fijas no lo hacen; lo cual genera mayor presión hacia los deudores de poder pagar sus compromisos. Por estos motivos, se puede considerar que las burbujas especulativas generan condiciones indeseables para la Fed en términos de desempleo y de inestabilidad de los precios.

B. Haz una lista de los conceptos y variables que consideres son más relevantes para entender la burbuja inmobiliaria. Mantén tu lista acotada (i.e. no más de diez variables). Agrega conceptos similares en una sola variable (e.g. no es necesario distinguir entre diferentes tipos de bienes inmobiliarios o entre diferentes tipos de hipotecas). Para este ejercicio una perspectiva macro es preferible a una perspectiva micro. Piensa críticamente sobre qué elementos o variables son endógenas y cuáles se encuentran en la frontera del sistema. Define las métricas que puedan ayudarte a monitorear el desempeño del sistema.

R:

  1. Política monetaria.(Política)
  2. Dinero en circulación. (Variable endógena)
  3. Instrumentos hipotecarios laxos. (Variable endógena)
  4. Número de corredores de hipotecas, agentes de bienes raíces, etc. (Variable endógena)
  5. Créditos otorgados sin documentos, con ingresos autoreportados y no verificados, etc. (Variable endógena).
  6. Demanda de bienes raíces (Variable endógena).
  7. Precios de bienes raíces. (Variable endógena)
  8. Oferta de bienes raíces. (Variable endógena)
  9. Impago de créditos hipotecarios. (Variable endógena)
  10. Estabilidad económica (empleo, estabilidad de precios). (Métrica)

C. Desarrolla un diagrama causal que capture los procesos de causalidad circular que consideres son responsables de la burbuja inmobiliaria. Emplea el siguiente diagrama causal como base para tu propio diagrama causal. Agrega los procesos de retroalimentación que consideres más relevantes.

D. Usa la descripción de caso y tu propio conocimiento para graficar el comportamiento de algunas de las variables que has identificado (e.g. precio, demanda y oferta). Primero, identifica el horizonte de tiempo de interés para este caso, es importante que elijas un período de tiempo que cubra la situación que dio origen a la burbuja, el período de ajuste violento de los mercados y el período de tiempo subsecuente después de la implosión de la burbuja. Segundo, grafica las variables de interés a través del horizonte de tiempo que elegiste. Es importante que denotes adecuadamente las unidades de tiempo y las unidades de las variables que se están graficando. Recuerda, en este ejercicio, los patrones cualitativos que identifiques son más relevantes que la precisión cuantitativa.

R: El horizonte temporal que se seleccionó, considerando las estimaciones de Bob Shiller sobre la apreciación de los bienes inmuebles en Estados Unidos, es desde 1998 donde la burbuja comienza a formarse hasta el 2013, donde de acuerdo con las gráficas expuestas en el caso, ya se está llegando a una estabilidad en el precio de las casas.

E. Combina tus respuestas de los incisos anteriores y mapea la estructura de este sistema relevante para el problema que identificaste empleando el diagrama de sistema discutido en clase. Dicho diagrama debe indicar claramente que variables o elementos del sistema se encuentran en la barrera del sistema, que políticas pueden implementarse para influir en el comportamiento del sistema y que métricas pueden emplearse para monitorear el desempeño del sistema y la efectividad de las políticas de intervención.

F. Emplea tu diagrama y responde brevemente a las siguientes preguntas. ¿Qué factores contribuyeron a la implosión de la burbuja? ¿Qué políticas hubiesen prevenido que la burbuja inmobiliaria estallara? ¿Qué políticas pudieron haber mitigado los efectos negativos de la burbuja en la economía? ¿Qué políticas pueden prevenir la generación de una burbuja similar? ¿Qué tan efectivas han sido las políticas implementadas hasta el día de hoy con respecto de los objetivos que identificaste?

R: - El principal factor que llevó a la implosión de la burbuja fue el impago de créditos hipotecarios, el cuál fue construido por la burbuja y que, al ser lo suficientemente alto,ocasionó el balance con el ciclo de implosión de la burbuja, el cuál consiste de el desplome de los precios de los bienes raíces y de los nuevos créditos otorgados.

  • La implosión de la burbuja pudo haberse postergado con una mayor inyección de dinero a la economía por parte de la Fed, que permitiera que la demanda de bienes raíces siguiera escalando.

  • Si la política monetaria hubies respondido de inmediato a la caída de los precios de los activos, hubiese sido probable que los efectos negativos del estallido de la burbuja de precios de los activos sobre la actividad económica derivados de la disminución de la riqueza y el aumento del costo del capital para las empresas y los hogares hubiesen sido pequeños.

  • En la mayoría de los casos, la política monetaria no debería responder a los precios de los activos como tal, sino a cambios en la prospectiva para la inflación derivada de esta. Esto debido a que, por un lado, las burbujas especulativas son difíciles de identificar, y una política monetaria restrictiva pudiera limitar el crecimiento económico aun cuando existe la posibilidad de que no se esté presentando una burbuja como tal, o que la burbuja correspondiente no representa un problema significativo para la economía. También, y aun si las burbujas fueran fácilmente identificables, no se tiene mucha claridad en cuanto a cómo influenciará la política monetaria restrictiva (aumento de tasas de interés, por ejemplo) a una burbuja; pero se sabe que finalmente estas acciones de política monetaria afectan a los activos en general y no solamente al activo en cuestión. Por otro lado, más que considerar que la política monetaria pudiera prevenir la formación de nuevas burbujas, pudiera ser más efectivo pensar en regulaciones específicas que impidan que se formen como, por ejemplo, evitar que se otorguen créditos hipotecarios sin verificar la solidez financiera del beneficiario.

  • Considero que existe una oportunidad importante de regulación. Se debería de aspirar a tener un marco regulatorio que considere el monitoreo contínuo del sistema financiero y que busque incidir en los ciclos de reforzamiento que actualmente generan las burbujas para prevenirlas.

Problema 2: Emprendedores y Transiciones Tecnológicas

Preguntas del caso:

2.1 Desarrolla un diagrama causal del caso anterior. Identifica los ciclos de causalidad circular existentes y relevantes. Identifica su polaridad (i.e. positiva, negativa). Nombra estos ciclos de causalidad circular de tal manera que se describa su efecto apropiadamente.

2.2 Formula una hipótesis dinámica sobre el comportamiento del sistema. Enfócate en el comportamiento de las variables que consideres son más relevantes. Describe gráficamente tu hipótesis dinámica.

R: La hipótesis dinámica que se propone es un reforzamiento del éxito de las tecnologías a través del tiempo. Si bien en sus arranques las tecnologías exitosas no incrementan, o incrementan a tasas muy bajas debido a las dinámicas del ciclo de reforzamiento de la incertidumbre, la certidumbre se amplifica paulatinamente conforme la tecnología adquiere fondeo ya sea del mismo emprendedor o de las inversiones obtenidas, lo cuál ocasiona que las tecnologías exitosas crezcan a tasas más altas hasta llegar a un máximo en el cuál la tecnología ya tiene el suficiente fondeo para salir al mercado.

2.3 Considera la posición de una secretaría de innovación cuyo objetivo es incrementar la tasa de desarrollo de nuevas tecnologías. Emplea el diagrama de sistema discutido en clase para identificar las variables en la barrera del sistema, las métricas para monitorear el cumplimiento de dicho objetivo y las poíticas que podrían implementarse para incrementar la tasa de desarrollo de nuevas tecnologías. Describe gráficamente el efecto en el comportamiento del sistema que consideras tendría una de las políticas que identificaste.

R: Las variables identificadas en la barrera del sistema serían, en cuanto a variables exógenas, los recursos que el emprendedor pudiese invertir en su proyecto, y a manera de métrica de desempeño se pudiera considerar el éxito de la tecnología. En cuanto a políticas, una secretaría de innovación pudiera otorgar créditos a la innovación tecnológica para emprendedores, los cuales se traducirían en recursos adicionales que abonan al ciclo causal para que sus tecnologías sean exitosas. Un diagrama causal incorporando esta política se vería de la siguiente forma:

Como resultado, se esperaría contar con un comportamiento similar a la hipótesis dinámica anterior, con la excepción de que la nueva hipótesis dinámica resultaría en una mayor tasa de desarrollo de tecnologías en un menor tiempo; así como un valor final de tecnologías exitosas más alto del que se tendría sin esta política. La gráfica se visualizaría de esta forma:

Problema 3: Políticas de desarrollo urbano

Preguntas del caso:

3.1 Desarrolla un diagrama causal de este caso (10 puntos, productos: diagrama causal)

3.2 Emplea tu diagrama causal para describir gráficamente tu hipótesis dinámica inicial sobre la dinámica de los precios de las propiedades (10 puntos, productos: descripción hipótesis dinámica, gráfico de hipótesis dinámica)

R: Tomando como condición inicial precios altos de bienes raíces, estos disminuyen a tasas altas debido a la inyección de nuevos desarrollos inmobiliarios al mercado y a la sobreoferta relativa que esto trae como consecuencia. Los precios bajos ocasionan incrementos en la demanda de bienes raíces, que a su vez reduce la sobre oferta y aumenta los precios paulatinamente. Las desarrolladoras identifican la alta demanda y se tardan 2-3 años en entregar sus proyectos simultáneamente para nuevamente desplomar los precios de los bienes raíces.

A partir de este comportamiento, se propone una hipótesis dinámica de un comportamiento oscilatorio del precio de las propiedades en el tiempo; el cual sufre incrementos paulatinos a tasas bajas mientras el mercado se equilibra, y se desploma a tasas altas cuando surgen nuevos desarrollos inmobiliarios.

3.3 ¿Qué tipo de política podría seguir una compañía constructora inteligente? Emplea el diagrama de sistema visto en clase (i.e. políticas, factores exógenos, diagrama causal y métricas de comportamiento) (diapositiva 56, Seminario1) para describir el funcionamiento de dicha política y su efecto en el sistema. Grafica el comportamiento esperado de dicha política y contrástala brevemente con tu hipótesis dinámica inicial (10 puntos, productos: diagrama de sistema (diapositiva 35, Seminario2), gráfico contrastando el comportamiento de la política y la hipótesis dinámica).

R: Una compañía constructora inteligente pudiese implementar una política basada en desfasar sus proyectos con respecto al resto de su competencia. Este desfase ocasionaría un incremento en la oferta en el sistema cuando el comportamiento del precio ya es alcista, un tiempo t determinado posterior a la inyección de proyectos al mercado por parte de su competencia. Esto ocasionaría que esta empresa se beneficie de vender sus proyectos en momentos en los cuales la oferta no es tan alta, por lo cual le sería posible venderlos en precios más altos y así generar mayoes rendimientos de sus inversiones.

La hipótesis dinámica es, por lo tanto, de un comportamiento oscilatorio, con una tasa de desplome de los precios un poco más baja que en la hipótesis inicial; y con una tasa de incremento de los precios que se ve menguada por la entrada de los proyectos de la compañía constructora inteligente.

Problema 4: Modelando la epidemia SARS

Preguntas del caso:

4.1 Incluye tu modelo en la entrega final de la tarea, nombra tu modelo de la siguiente manera: Tunombre_sars_model.R. Toma en cuenta que el modelo que envíes será revisado en términos de las sintaxis del código, pero fundamentalmente en términos de su funcionalidad. Un modelo que no funcione al ser ejecutado será penalizado notablemente (30 puntos, productos: archivo con el modelo).

4.2 ¿Qué sucede cuando inicializas la variable de estado “Population infected with SARS” en cero? Explica brevemente que origina el comportamiento que observas, emplea la estructura del modelo para cimentar tu argumentación (10 puntos, productos: gráfico de simulación y breve descripción).

R: Si la variable de población infectada con SARS es inicializada con valor de cero, no existiría un “paciente cero” en ningún punto del tiempo que diseminaría el virus, comenzando la pandemia. Por lo tanto, se puede apreciar que la población susceptible al SARS se mantiene en su valor original de 350, mientras que la población infectada con SARS en ningún punto incrementa su valor por encima de 0.

4.3 ¿Cómo cambia la dinámica de comportamiento del modelo si inicializas esta variable de estado a un valor positivo diferente de cero?

R: Al inicializar la variable de estado population.infected.with.SARS en un valor positivo diferente de cero, se tienen varios efectos:

  • El crecimiento en el número de contagios se da de forma más ascelerada conforme se incrementa el valor inicial de la variable de estado.
  • Considerando que no se alteró la variable de estado population.susceptible.to.SARS, el equilibrio en la cantidad de pacientes infectados se da en un valor que es igual a la suma de la población infectada con SARS y de la población susceptible a infectarse con SARS; ambas en tiempo cero.

Por ejemplo: si se inicializa la population.infected.with.SARS con un valor de 1, podemos apreciar en las gráficas que se llega al equilibrio más adelante en el tiempo que si esta misma variable se inicializa con un valor de 50; manteniendo la population.susceptible.to.SARS constante. También podemos apreciar que el valor final de equilibrio de population.infected.with.SARS se da en un valor de 351 en el primer caso, mientras que en el segundo caso se da en un valor de 400.

Gráficas inicializadas con population.infected.with.SARS = 1

Gráficas inicializadas con population.infected.with.SARS = 50

4.4 ¿Cómo cambia la dinámica del sistema si aumenta el valor del parámetro “Contact Frequency”? ¿El valor de este parámetro modifica el valor final de la variable de estado “Population Infected with SARS”? Explica porque sí o porque no haciendo referencia a la estructura del modelo y a los resultados de la simulación (10 puntos, productos: gráfico con resultados de simulación y descripción de resultados).

R: El incremento en el parámetro Contact.frequency cambia la dinámica del modelo, pues vuelve el crecimiento de la variable de estado population.infected.with.SARS más acelerado, así como el colapso de la variable de estado population.susceptible.to.SARS. Esto se da debido a la polaridad positiva que tiene el enlace de este parámetro con las variables subsecuentes en el ciclo de Depletion hasta llegar a la variable de flujo Infection.Rate. Sin embargo, los valores de equilibrio de ambas variables de estado no se ven alterados por los cambios en este parámetro, pues estos valores están limitados por el total de la population.susceptible.to.SARS con la cual se inicializa el modelo; que en este caso es una cantidad finita de 350 personas.

Gráficas con valor del parámetro Contact.frequency = 2

Gráficas con valor del parámetro Contact.frequency = 4

Gráficas con valor del parámetro Contact.frequency = 8

4.5 ¿Cómo cambia el comportamiento del modelo si la variable de flujo “Infection Rate” cambia? Sigue los siguientes lineamientos para dar tu respuesta: Responde a esta pregunta describiendo brevemente los cambios que identificas al cambiar el valor de esta variable. Emplea un par de gráficos de comportamiento del modelo para dar soporte a tu respuesta. (10 puntos, productos: gráfico con resultados de simulación y descripción de resultados).

R: La variable de flujo Infection.Rate, de acuerdo con el modelo, está influenciada positivamente por la variable Contacts.between.Infected.and.Uninfected.People y por el parámetro Infectivity; por lo que para fines de este ejercicio se alteró el parámetro Infectivity para incidir en Infection.Rate y modelar sus cambios.

Al duplicar el parámetro Infectivity, incrementando así la variable de flujo Infection.Rate también al doble, se aprecia un incremento en la tasa de contagios que resulta en que se llega al máximo de pacientes infectados en menor tiempo. Por otro lado, al reducir a la mitad el parámetro Infectivity reduciendo también a la mitad la variable de flujo Infection.Rate; se aprecia que hay una reducción importante en la tasa de contagios y que en el transcurso del tiempo del modelo de 120 días apenas se llega al máximo de personas infectadas. Es importante aclarar que los valores de equilibrio de las variables de estado population.infected.with.SARS y de population.susceptible.to.SARS no se ven afectados por estos cambios.

Gráficas con valor de la variable de flujo Infection.Rate inicial

Gráficas con valor de la variable de flujo Infection.Rate duplicado

Gráficas con valor de la variable de flujo Infection.Rate reducido a la mitad

4.6 El modelo que has desarrollado siguiendo el tutorial anterior es demasiado simple. Brevemente critica la formulación y estructura del modelo y lista las suposiciones del modelo que consideras son irrealistas. Uno o dos párrafos son más que suficientes para responder este punto (10 puntos, productos: respuesta textual).

R: El modelo, tal como está formulado, supone que aquellos que son infectados se mantienen infectados indefinidamente; en lugar de proponer que aquellos pacientes infectados pueden recuperarse o fallecer, lo cual los restaría de la variable de estado de personas infectadas con SARS y, en el segundo caso, los restaría también de la variable auxiliar de población total. Incluso, considerando a los pacientes recuperados, el modelo tampoco considera que estos pueden volverse nuevamente susceptibles a adquirir el SARS después de algún periodo promedio de inmunidad adquirida a partir de su infección.

Después de agregar la variable de estado population.recovered.from.SARS, la variable de flujo Recovery.Rate y el parámetro Average.Duration.of.Infectivity:

4.7 ¿De qué manera cambia el comportamiento de la epidemia una vez que agregas estas nuevas variables al modelo? (10 puntos, productos: nueva versión del modelo, gráficos con comportamiento de las tres variables de estado).

R:

Gráficas agregando la variable de estado population.recovered.from.SARS, la variable de flujo Recovery.Rate y el parámetro Average.Duration.of.Infectivity

4.8 Describe gráficamente y con un breve texto el efecto en el sistema de cambios (i.e. incremento y decremento) de las siguientes variables: “contact frequency” y “infectivity”. Enfatiza en las diferencias que percibes con respecto del comportamiento del modelo base. Se concis@ y breve en tu descripción textual y gráfica (10 puntos, productos: descripción de comportamiento, gráficos describiendo el comportamiento del modelo)

R: Para fines de ilustrar el efecto de los incrementos y decrementos en los parámetros Contact.Frequency e Infectivity, se optó por duplicar y reducir ambos parámetros a la mitad en diferentes escenarios y manteniendo el otro parámetro constante, lo cuál resultó en un total de 4 escenarios además del escenario base.

Como se puede apreciar en las gráficas incluidas a continuación, el duplicar cualquiera de los dos parámetros resulta en un efecto duplicativo de la variable de flujo Infection.Rate. Esto nos da como consecuencia a su vez una caída más acelerada en la population.susceptible.to.SARS, un valor máximo de population.infected.with.SARS más alto que en el caso base que es alcanzado en menor tiempo, y una subsecuente tasa de recuperación más alta que trae consigo una mayor cantidad de population.recovered.from.SARS en menor tiempo que en el caso base.

Por otro lado, el reducir por la mitad cualquiera de los dos parámetros resulta en una reducción por la mitad de la variable de flujo Infection.Rate. Esto nos da como consecuencia a su vez una caída menos acelerada en la population.susceptible.to.SARS, un valor máximo de population.infected.with.SARS que no se alcanza en el transcurso del tiempo estudiado en el modelo pero que seguramente sería menor que en caso base, y una subsecuente tasa de recuperación más baja que trae consigo una menor cantidad de population.recovered.from.SARS en mayor tiempo que en el caso base.

Haciendo referencia al diagrama stock-flow y al mismo modelo, es importante resaltar que los mismos cambios en los parámetros Contact.Frequency e Infectivity tienen el mismo efecto en el comportamiento del modelo debido a la proporcionalidad de estos parámetros con la variable de flujo Infection.Rate.

Gráficas con valores iniciales de Contact.Frequency = 2 y de Infectivity = 0,1

Gráficas con valores de Contact.Frequency = 2 y de Infectivity = 0,05

Gráficas con valores de Contact.Frequency = 2 y de Infectivity = 0,2

Gráficas con valores de Contact.Frequency = 1 y de Infectivity = 0,1

Gráficas con valores de Contact.Frequency = 4 y de Infectivity = 0,1

Problema 5: Crecimiento y colapso

Preguntas del caso

5.1 Construye un modelo de dinámica de sistemas de este caso de estudio. Nota, las variables del modelo se indican en itálicas. Emplea esta ayuda para construir tu modelo (30 puntos, productos: modelo en R, mande tu modelo con la versión final de tu tarea, emplea el siguiente formato para nombrar tu modelo: TuNombre_crecimiento_colapso.R)

5.2 Describe textualmente tu hipótesis dinámica. (10 puntos, productos: descripción hipótesis dinámica).

R: La hipótesis consiste de un modelo de crecimiento y colapso de la población y de los recursos renovables, en el cual la variable de estado population crece a una tasa moderada mientras la tasa de regeneración de los recursos renovables regeneration es ligeramente menor al uso de recursos renovables resource.use; por lo cual se denota un comportamiento ligeramente bajista en la variable de estado renewable resources. Sin embargo, en un momento en el tiempo, la diferencia entre las varaibles de flujo regeneration y resource.use causan una caída en la variable de estado renewable resources; lo cual ocasiona que el proceso de regeneración sea mucho más lento. Esto genera un colapso de los renewable resources y un colapso subsecuente en la population debido a su dependencia de los recursos renovables para sobrevivir.

5.3 Emplea tu modelo para mostrar la dinámica de comportamiento del modelo cuando la variable “minimum regeneration rate” es igual a 10% por año. (20 puntos: descripción textual y gráfica del comportamiento del sistema).

R: Para ilustrar mejor este ejercicio, se modificó la escala de tiempo del modelo hasta 200 años.

La variable de flujo regeneration consta de dos componentes; los cuales son las variables auxiliares resource.dependent.regeneration, que es la regeneración de recursos que depende de la existencia de los mismos, y minimum.regeneration que es la regeneración de recursos que es independiente de la existencia de los mismos. Siguiendo ese principio, si se incrementa de 1% a 10% el valor de minimum.regeneration.rate, que es directamente proporcional a minimum.regeneration, se tendría una regeneración mucho más importante de recursos a pesar de su agotamiento. Esto lleva al sistema a llegar a un equilibrio en las variables de estado population y renewable.resources, en donde el crecimiento de la población es menguado por la disponibilidad de recursos; pero no hay colapsos en ninguno de los dos casos puesto que la cantidad de recursos naturales tiene una menor influencia en su tasa de regeneración.

LS0tDQp0aXRsZTogJ01vZGVsYWNpw7NuIGRlIHNpc3RlbWFzOiBUYXJlYSAxJw0KYXV0aG9yOiAiR3VpbGxlcm1vIEFsYmVydG8gR2FyY2lhIENhbmRhbm9zYSAtIEEwMTAzNDk1OCINCmRhdGU6ICcyMDIyLTAyLTAyJw0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQotLS0NCg0KIyBQcm9ibGVtYSAxOiBCdXJidWphcyBlc3BlY3VsYXRpdmFzIHkgbGEgY3Jpc2lzIGlubW9iaWxpYXJpYSBlbiBFc3RhZG9zIFVuaWRvcw0KDQojIyBQcmVndW50YXMgZGVsIGNhc286DQpBLiBUb21hIGxhIHBlcnNwZWN0aXZhIGRlIGxhIFJlc2VydmEgRmVkZXJhbCBlc3RhZHVuaWRlbnNlIChpLmUuIEJhbmNvIENlbnRyYWwpLiBEZWZpbmUgZWwgcHJvYmxlbWEgcXVlIGVzdGUgdGlwbyBkZSBidXJidWphcyByZXByZXNlbnRhbiBwYXJhIGVzdGEgaW5zdGl0dWNpw7NuLiBSZWN1ZXJkYSwgbGEgZGVzY3JpcGNpw7NuIGRlbCBwcm9ibGVtYSBkZWJlIGVuZmF0aXphciBsYSBleGlzdGVuY2lhIGRlIHVuYSBicmVjaGEgZW50cmUgbGEgc2l0dWFjacOzbiBhY3R1YWwgeSBlbCBlc3RhZG8gZnV0dXJvIGRlc2VhYmxlIHBhcmEgbGEgaW5zdGl0dWNpw7NuLiBJbnZlc3RpZ2EgYWNlcmNhIGRlIGxhcyBmdW5jaW9uZXMgeSBvYmpldGl2b3MgZGUgbGEgcmVzZXJ2YSBmZWRlcmFsIHkgZGUgbGFzIHBvbMOtdGljYXMgcXVlIHB1ZWRlIGltcGxlbWVudGFyIHBhcmEgaW50ZXJ2ZW5pciBlbiBsb3MgbWVyY2Fkb3MgY29uIGVsIGZpbiBkZSBtaXRpZ2FyIG8gZXZpdGFyIGxvcyBlZmVjdG9zIG5lZ2F0aXZvcyBkZSBsYXMgYnVyYnVqYXMgZmluYW5jaWVyYXMuDQoNCipSOiBMYSBSZXNlcnZhIEZlZGVyYWwgZXN0YWRvdW5pZGVuc2UgdHJhYmFqYSBwYXJhIG1hbnRlbmVyIGxhIGVzdGFiaWxpZGFkIGVuIGxhIGVjb25vbcOtYSBkZSBlc3RlIHBhw61zIGEgdHJhdsOpcyBkZSBsYSBwb2zDrXRpY2EgbW9uZXRhcmlhLiBFc3BlY8OtZmljYW1lbnRlLCBsb3Mgb2JqZXRpdm9zIHF1ZSBzZSBwZXJzaWd1ZW4gY29uIGxhIGFwbGljYWNpw7NuIGRlIGxhIHBvbMOtdGljYSBtb25ldGFyaWEgc29uOioNCg0KLSAqVGVuZXIgZWwgbWF5b3Igbml2ZWwgZGUgZW1wbGVvIHF1ZSBlbCBwYcOtcyBwdWVkYSBzb3N0ZW5lciBtYW50ZW5pZW5kbyBsYSBpbmZsYWNpw7NuIGVzdGFibGUsIHkqDQotICp0ZW5lciBlc3RhYmlsaWRhZCBlbiBsb3MgcHJlY2lvcywgZGUgZm9ybWEgcXVlIHRhbnRvIHBlcnNvbmFzIGNvbW8gbmVnb2Npb3Mgbm8gc2UgcHJlb2N1cGVuIHBvciBwcmVjaW9zIGFsY2lzdGFzIG8gYmFqaXN0YXMgYWwgbW9tZW50byBkZSBoYWNlciBwbGFuZXMuKg0KDQoqUmVsYWNpb25hbmRvIGxvcyBwcmljbmlwYWxlcyBvYmpldGl2b3MgZGUgbGEgRmVkIGNvbiBsYXMgYnVyYnVqYXMgZXNwZWN1bGF0aXZhcywgc2UgcHVlZGUgZGVjaXIgcXVlIGxhcyBidXJidWphcyBlc3BlY3VsYXRpdmFzIGdlbmVyYW4gYWx0YSBpbmVzdGFiaWxpZGFkIGVuIGxhIGVjb25vbcOtYSBkZSBFRVVVLiBFc3RvIGRlYmlkbyBhIHF1ZSBsYXMgYnVyYnVqYXMgZXNwZWN1bGF0aXZhcywgYWwgcmV2ZW50YXIsIGltcGFjdGFuIGEgcGVyc29uYXMgeSBhIGVtcHJlc2FzIHF1ZSBkZWNpZGVuIGludmVydGlyIHRhcmRlIGVuIGxvcyBhY3Rpdm9zIGN1eW9zIHByZWNpb3Mgc29uIGFmZWN0YWRvcyBwb3IgbGEgYnVyYnVqYSAoYmllbmVzIHJhw61jZXMgZW4gZWwgY2FzbyBkZSBsYSBjcmlzaXMgaW5tb2JpbGlhcmlhKS4gRWwgY29sYXBzbyBpbmV2aXRhYmxlIGRlIGxhcyBidXJidWphcyBkZSBhY3Rpdm9zIGRlc3Bsb21hIGVsIHZhbG9yIG5ldG8gZGUgbG9zIGludmVyc2lvbmlzdGFzLCB5IGVzdG8gb2Nhc2lvbmEgcXVlIGxhcyBlbXByZXNhcyBleHB1ZXN0YXMgcXVpZWJyZW4geSBxdWUgYWRlbcOhcyBzZSBnZW5lcmUgdW4gZXNwaXJhbCBkZSBkZWZsYWNpw7NuIGRlIGxhIGRldWRhIGVuIGVsIGN1YWwgbG9zIHByZWNpb3MgZGUgbG9zIGJpZW5lcyB5IGxvcyBzYWxhcmlvcyBzZSByZWR1Y2VuLCBwZXJvIGxvcyBwYWdvcyBkZSBpbnRlcmVzZXMgZW4gdGFzYXMgZmlqYXMgbm8gbG8gaGFjZW47IGxvIGN1YWwgZ2VuZXJhIG1heW9yIHByZXNpw7NuIGhhY2lhIGxvcyBkZXVkb3JlcyBkZSBwb2RlciBwYWdhciBzdXMgY29tcHJvbWlzb3MuIFBvciBlc3RvcyBtb3Rpdm9zLCBzZSBwdWVkZSBjb25zaWRlcmFyIHF1ZSBsYXMgYnVyYnVqYXMgZXNwZWN1bGF0aXZhcyBnZW5lcmFuIGNvbmRpY2lvbmVzIGluZGVzZWFibGVzIHBhcmEgbGEgRmVkIGVuIHTDqXJtaW5vcyBkZSBkZXNlbXBsZW8geSBkZSBpbmVzdGFiaWxpZGFkIGRlIGxvcyBwcmVjaW9zLioNCg0KQi4gSGF6IHVuYSBsaXN0YSBkZSBsb3MgY29uY2VwdG9zIHkgdmFyaWFibGVzIHF1ZSBjb25zaWRlcmVzIHNvbiBtw6FzIHJlbGV2YW50ZXMgcGFyYSBlbnRlbmRlciBsYSBidXJidWphIGlubW9iaWxpYXJpYS4gTWFudMOpbiB0dSBsaXN0YSBhY290YWRhIChpLmUuIG5vIG3DoXMgZGUgZGlleiB2YXJpYWJsZXMpLiBBZ3JlZ2EgY29uY2VwdG9zIHNpbWlsYXJlcyBlbiB1bmEgc29sYSB2YXJpYWJsZSAoZS5nLiBubyBlcyBuZWNlc2FyaW8gZGlzdGluZ3VpciBlbnRyZSBkaWZlcmVudGVzIHRpcG9zIGRlIGJpZW5lcyBpbm1vYmlsaWFyaW9zIG8gZW50cmUgZGlmZXJlbnRlcyB0aXBvcyBkZSBoaXBvdGVjYXMpLiBQYXJhIGVzdGUgZWplcmNpY2lvIHVuYSBwZXJzcGVjdGl2YSBtYWNybyBlcyBwcmVmZXJpYmxlIGEgdW5hIHBlcnNwZWN0aXZhIG1pY3JvLiBQaWVuc2EgY3LDrXRpY2FtZW50ZSBzb2JyZSBxdcOpIGVsZW1lbnRvcyBvIHZhcmlhYmxlcyBzb24gZW5kw7NnZW5hcyB5IGN1w6FsZXMgc2UgZW5jdWVudHJhbiBlbiBsYSBmcm9udGVyYSBkZWwgc2lzdGVtYS4gRGVmaW5lIGxhcyBtw6l0cmljYXMgcXVlIHB1ZWRhbiBheXVkYXJ0ZSBhIG1vbml0b3JlYXIgZWwgZGVzZW1wZcOxbyBkZWwgc2lzdGVtYS4NCg0KKlI6Kg0KDQoxLiAqUG9sw610aWNhIG1vbmV0YXJpYS4oUG9sw610aWNhKSoNCjIuICpEaW5lcm8gZW4gY2lyY3VsYWNpw7NuLiAoVmFyaWFibGUgZW5kw7NnZW5hKSoNCjMuICpJbnN0cnVtZW50b3MgaGlwb3RlY2FyaW9zIGxheG9zLiAoVmFyaWFibGUgZW5kw7NnZW5hKSoNCjQuICpOw7ptZXJvIGRlIGNvcnJlZG9yZXMgZGUgaGlwb3RlY2FzLCBhZ2VudGVzIGRlIGJpZW5lcyByYcOtY2VzLCBldGMuIChWYXJpYWJsZSBlbmTDs2dlbmEpKg0KNS4gKkNyw6lkaXRvcyBvdG9yZ2Fkb3Mgc2luIGRvY3VtZW50b3MsIGNvbiBpbmdyZXNvcyBhdXRvcmVwb3J0YWRvcyB5IG5vIHZlcmlmaWNhZG9zLCBldGMuIChWYXJpYWJsZSBlbmTDs2dlbmEpLioNCjYuICpEZW1hbmRhIGRlIGJpZW5lcyByYcOtY2VzIChWYXJpYWJsZSBlbmTDs2dlbmEpLioNCjcuICpQcmVjaW9zIGRlIGJpZW5lcyByYcOtY2VzLiAoVmFyaWFibGUgZW5kw7NnZW5hKSoNCjguICpPZmVydGEgZGUgYmllbmVzIHJhw61jZXMuIChWYXJpYWJsZSBlbmTDs2dlbmEpKg0KOS4gKkltcGFnbyBkZSBjcsOpZGl0b3MgaGlwb3RlY2FyaW9zLiAoVmFyaWFibGUgZW5kw7NnZW5hKSoNCjEwLiAqRXN0YWJpbGlkYWQgZWNvbsOzbWljYSAoZW1wbGVvLCBlc3RhYmlsaWRhZCBkZSBwcmVjaW9zKS4gKE3DqXRyaWNhKSoNCg0KQy4gRGVzYXJyb2xsYSB1biBkaWFncmFtYSBjYXVzYWwgcXVlIGNhcHR1cmUgbG9zIHByb2Nlc29zIGRlIGNhdXNhbGlkYWQgY2lyY3VsYXIgcXVlIGNvbnNpZGVyZXMgc29uIHJlc3BvbnNhYmxlcyBkZSBsYSBidXJidWphIGlubW9iaWxpYXJpYS4gRW1wbGVhIGVsIHNpZ3VpZW50ZSBkaWFncmFtYSBjYXVzYWwgY29tbyBiYXNlIHBhcmEgdHUgcHJvcGlvIGRpYWdyYW1hIGNhdXNhbC4gQWdyZWdhIGxvcyBwcm9jZXNvcyBkZSByZXRyb2FsaW1lbnRhY2nDs24gcXVlIGNvbnNpZGVyZXMgbcOhcyByZWxldmFudGVzLg0KDQohW10oZGlhZ3JhbWFfMUMucG5nKQ0KDQpELiBVc2EgbGEgZGVzY3JpcGNpw7NuIGRlIGNhc28geSB0dSBwcm9waW8gY29ub2NpbWllbnRvIHBhcmEgZ3JhZmljYXIgZWwgY29tcG9ydGFtaWVudG8gZGUgYWxndW5hcyBkZSBsYXMgdmFyaWFibGVzIHF1ZSBoYXMgaWRlbnRpZmljYWRvIChlLmcuIHByZWNpbywgZGVtYW5kYSB5IG9mZXJ0YSkuIFByaW1lcm8sIGlkZW50aWZpY2EgZWwgaG9yaXpvbnRlIGRlIHRpZW1wbyBkZSBpbnRlcsOpcyBwYXJhIGVzdGUgY2FzbywgZXMgaW1wb3J0YW50ZSBxdWUgZWxpamFzIHVuIHBlcsOtb2RvIGRlIHRpZW1wbyBxdWUgY3VicmEgbGEgc2l0dWFjacOzbiBxdWUgZGlvIG9yaWdlbiBhIGxhIGJ1cmJ1amEsIGVsIHBlcsOtb2RvIGRlIGFqdXN0ZSB2aW9sZW50byBkZSBsb3MgbWVyY2Fkb3MgeSBlbCBwZXLDrW9kbyBkZSB0aWVtcG8gc3Vic2VjdWVudGUgZGVzcHXDqXMgZGUgbGEgaW1wbG9zacOzbiBkZSBsYSBidXJidWphLiBTZWd1bmRvLCBncmFmaWNhIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMgYSB0cmF2w6lzIGRlbCBob3Jpem9udGUgZGUgdGllbXBvIHF1ZSBlbGVnaXN0ZS4gRXMgaW1wb3J0YW50ZSBxdWUgZGVub3RlcyBhZGVjdWFkYW1lbnRlIGxhcyB1bmlkYWRlcyBkZSB0aWVtcG8geSBsYXMgdW5pZGFkZXMgZGUgbGFzIHZhcmlhYmxlcyBxdWUgc2UgZXN0w6FuIGdyYWZpY2FuZG8uIFJlY3VlcmRhLCBlbiBlc3RlIGVqZXJjaWNpbywgbG9zIHBhdHJvbmVzIGN1YWxpdGF0aXZvcyBxdWUgaWRlbnRpZmlxdWVzIHNvbiBtw6FzIHJlbGV2YW50ZXMgcXVlIGxhIHByZWNpc2nDs24gY3VhbnRpdGF0aXZhLg0KDQoqUjogRWwgaG9yaXpvbnRlIHRlbXBvcmFsIHF1ZSBzZSBzZWxlY2Npb27DsywgY29uc2lkZXJhbmRvIGxhcyBlc3RpbWFjaW9uZXMgZGUgQm9iIFNoaWxsZXIgc29icmUgbGEgYXByZWNpYWNpw7NuIGRlIGxvcyBiaWVuZXMgaW5tdWVibGVzIGVuIEVzdGFkb3MgVW5pZG9zLCBlcyBkZXNkZSAxOTk4IGRvbmRlIGxhIGJ1cmJ1amEgY29taWVuemEgYSBmb3JtYXJzZSBoYXN0YSBlbCAyMDEzLCBkb25kZSBkZSBhY3VlcmRvIGNvbiBsYXMgZ3LDoWZpY2FzIGV4cHVlc3RhcyBlbiBlbCBjYXNvLCB5YSBzZSBlc3TDoSBsbGVnYW5kbyBhIHVuYSBlc3RhYmlsaWRhZCBlbiBlbCBwcmVjaW8gZGUgbGFzIGNhc2FzLioNCg0KIVtdKGdyYWZpY2FzXzFELnBuZykNCg0KRS4gQ29tYmluYSB0dXMgcmVzcHVlc3RhcyBkZSBsb3MgaW5jaXNvcyBhbnRlcmlvcmVzIHkgbWFwZWEgbGEgZXN0cnVjdHVyYSBkZSBlc3RlIHNpc3RlbWEgcmVsZXZhbnRlIHBhcmEgZWwgcHJvYmxlbWEgcXVlIGlkZW50aWZpY2FzdGUgZW1wbGVhbmRvIGVsIGRpYWdyYW1hIGRlIHNpc3RlbWEgZGlzY3V0aWRvIGVuIGNsYXNlLiBEaWNobyBkaWFncmFtYSBkZWJlIGluZGljYXIgY2xhcmFtZW50ZSBxdWUgdmFyaWFibGVzIG8gZWxlbWVudG9zIGRlbCBzaXN0ZW1hIHNlIGVuY3VlbnRyYW4gZW4gbGEgYmFycmVyYSBkZWwgc2lzdGVtYSwgcXVlIHBvbMOtdGljYXMgcHVlZGVuIGltcGxlbWVudGFyc2UgcGFyYSBpbmZsdWlyIGVuIGVsIGNvbXBvcnRhbWllbnRvIGRlbCBzaXN0ZW1hIHkgcXVlIG3DqXRyaWNhcyBwdWVkZW4gZW1wbGVhcnNlIHBhcmEgbW9uaXRvcmVhciBlbCBkZXNlbXBlw7FvIGRlbCBzaXN0ZW1hIHkgbGEgZWZlY3RpdmlkYWQgZGUgbGFzIHBvbMOtdGljYXMgZGUgaW50ZXJ2ZW5jacOzbi4NCg0KIVtdKGRpYWdyYW1hXzFFLnBuZykNCg0KRi4gRW1wbGVhIHR1IGRpYWdyYW1hIHkgcmVzcG9uZGUgYnJldmVtZW50ZSBhIGxhcyBzaWd1aWVudGVzIHByZWd1bnRhcy4gwr9RdcOpIGZhY3RvcmVzIGNvbnRyaWJ1eWVyb24gYSBsYSBpbXBsb3Npw7NuIGRlIGxhIGJ1cmJ1amE/IMK/UXXDqSBwb2zDrXRpY2FzIGh1Ymllc2VuIHByZXZlbmlkbyBxdWUgbGEgYnVyYnVqYSBpbm1vYmlsaWFyaWEgZXN0YWxsYXJhPyDCv1F1w6kgcG9sw610aWNhcyBwdWRpZXJvbiBoYWJlciBtaXRpZ2FkbyBsb3MgZWZlY3RvcyBuZWdhdGl2b3MgZGUgbGEgYnVyYnVqYSBlbiBsYSBlY29ub23DrWE/IMK/UXXDqSBwb2zDrXRpY2FzIHB1ZWRlbiBwcmV2ZW5pciBsYSBnZW5lcmFjacOzbiBkZSB1bmEgYnVyYnVqYSBzaW1pbGFyPyDCv1F1w6kgdGFuIGVmZWN0aXZhcyBoYW4gc2lkbyBsYXMgcG9sw610aWNhcyBpbXBsZW1lbnRhZGFzIGhhc3RhIGVsIGTDrWEgZGUgaG95IGNvbiByZXNwZWN0byBkZSBsb3Mgb2JqZXRpdm9zIHF1ZSBpZGVudGlmaWNhc3RlPw0KDQoqUjoqDQotICpFbCBwcmluY2lwYWwgZmFjdG9yIHF1ZSBsbGV2w7MgYSBsYSBpbXBsb3Npw7NuIGRlIGxhIGJ1cmJ1amEgZnVlIGVsIGltcGFnbyBkZSBjcsOpZGl0b3MgaGlwb3RlY2FyaW9zLCBlbCBjdcOhbCBmdWUgY29uc3RydWlkbyBwb3IgbGEgYnVyYnVqYSB5IHF1ZSwgYWwgc2VyIGxvIHN1ZmljaWVudGVtZW50ZSBhbHRvLG9jYXNpb27DsyBlbCBiYWxhbmNlIGNvbiBlbCBjaWNsbyBkZSBpbXBsb3Npw7NuIGRlIGxhIGJ1cmJ1amEsIGVsIGN1w6FsIGNvbnNpc3RlIGRlIGVsIGRlc3Bsb21lIGRlIGxvcyBwcmVjaW9zIGRlIGxvcyBiaWVuZXMgcmHDrWNlcyB5IGRlIGxvcyBudWV2b3MgY3LDqWRpdG9zIG90b3JnYWRvcy4qDQoNCi0gKkxhIGltcGxvc2nDs24gZGUgbGEgYnVyYnVqYSBwdWRvIGhhYmVyc2UgcG9zdGVyZ2FkbyBjb24gdW5hIG1heW9yIGlueWVjY2nDs24gZGUgZGluZXJvIGEgbGEgZWNvbm9tw61hIHBvciBwYXJ0ZSBkZSBsYSBGZWQsIHF1ZSBwZXJtaXRpZXJhIHF1ZSBsYSBkZW1hbmRhIGRlIGJpZW5lcyByYcOtY2VzIHNpZ3VpZXJhIGVzY2FsYW5kby4qDQoNCi0gKlNpIGxhIHBvbMOtdGljYSBtb25ldGFyaWEgaHViaWVzIHJlc3BvbmRpZG8gZGUgaW5tZWRpYXRvIGEgbGEgY2HDrWRhIGRlIGxvcyBwcmVjaW9zIGRlIGxvcyBhY3Rpdm9zLCBodWJpZXNlIHNpZG8gcHJvYmFibGUgcXVlIGxvcyBlZmVjdG9zIG5lZ2F0aXZvcyBkZWwgZXN0YWxsaWRvIGRlIGxhIGJ1cmJ1amEgZGUgcHJlY2lvcyBkZSBsb3MgYWN0aXZvcyBzb2JyZSBsYSBhY3RpdmlkYWQgZWNvbsOzbWljYSBkZXJpdmFkb3MgZGUgbGEgZGlzbWludWNpw7NuIGRlIGxhIHJpcXVlemEgeSBlbCBhdW1lbnRvIGRlbCBjb3N0byBkZWwgY2FwaXRhbCBwYXJhIGxhcyBlbXByZXNhcyB5IGxvcyBob2dhcmVzIGh1Ymllc2VuIHNpZG8gcGVxdWXDsW9zLioNCg0KLSAqRW4gbGEgbWF5b3LDrWEgZGUgbG9zIGNhc29zLCBsYSBwb2zDrXRpY2EgbW9uZXRhcmlhIG5vIGRlYmVyw61hIHJlc3BvbmRlciBhIGxvcyBwcmVjaW9zIGRlIGxvcyBhY3Rpdm9zIGNvbW8gdGFsLCBzaW5vIGEgY2FtYmlvcyBlbiBsYSBwcm9zcGVjdGl2YSBwYXJhIGxhIGluZmxhY2nDs24gZGVyaXZhZGEgZGUgZXN0YS4gRXN0byBkZWJpZG8gYSBxdWUsIHBvciB1biBsYWRvLCBsYXMgYnVyYnVqYXMgZXNwZWN1bGF0aXZhcyBzb24gZGlmw61jaWxlcyBkZSBpZGVudGlmaWNhciwgeSB1bmEgcG9sw610aWNhIG1vbmV0YXJpYSByZXN0cmljdGl2YSBwdWRpZXJhIGxpbWl0YXIgZWwgY3JlY2ltaWVudG8gZWNvbsOzbWljbyBhdW4gY3VhbmRvIGV4aXN0ZSBsYSBwb3NpYmlsaWRhZCBkZSBxdWUgbm8gc2UgZXN0w6kgcHJlc2VudGFuZG8gdW5hIGJ1cmJ1amEgY29tbyB0YWwsIG8gcXVlIGxhIGJ1cmJ1amEgY29ycmVzcG9uZGllbnRlIG5vIHJlcHJlc2VudGEgdW4gcHJvYmxlbWEgc2lnbmlmaWNhdGl2byBwYXJhIGxhIGVjb25vbcOtYS4gVGFtYmnDqW4sIHkgYXVuIHNpIGxhcyBidXJidWphcyBmdWVyYW4gZsOhY2lsbWVudGUgaWRlbnRpZmljYWJsZXMsIG5vIHNlIHRpZW5lIG11Y2hhIGNsYXJpZGFkIGVuIGN1YW50byBhIGPDs21vIGluZmx1ZW5jaWFyw6EgbGEgcG9sw610aWNhIG1vbmV0YXJpYSByZXN0cmljdGl2YSAoYXVtZW50byBkZSB0YXNhcyBkZSBpbnRlcsOpcywgcG9yIGVqZW1wbG8pIGEgdW5hIGJ1cmJ1amE7IHBlcm8gc2Ugc2FiZSBxdWUgZmluYWxtZW50ZSBlc3RhcyBhY2Npb25lcyBkZSBwb2zDrXRpY2EgbW9uZXRhcmlhIGFmZWN0YW4gYSBsb3MgYWN0aXZvcyBlbiBnZW5lcmFsIHkgbm8gc29sYW1lbnRlIGFsIGFjdGl2byBlbiBjdWVzdGnDs24uIFBvciBvdHJvIGxhZG8sIG3DoXMgcXVlIGNvbnNpZGVyYXIgcXVlIGxhIHBvbMOtdGljYSBtb25ldGFyaWEgcHVkaWVyYSBwcmV2ZW5pciBsYSBmb3JtYWNpw7NuIGRlIG51ZXZhcyBidXJidWphcywgcHVkaWVyYSBzZXIgbcOhcyBlZmVjdGl2byBwZW5zYXIgZW4gcmVndWxhY2lvbmVzIGVzcGVjw61maWNhcyBxdWUgaW1waWRhbiBxdWUgc2UgZm9ybWVuIGNvbW8sIHBvciBlamVtcGxvLCBldml0YXIgcXVlIHNlIG90b3JndWVuIGNyw6lkaXRvcyBoaXBvdGVjYXJpb3Mgc2luIHZlcmlmaWNhciBsYSBzb2xpZGV6IGZpbmFuY2llcmEgZGVsIGJlbmVmaWNpYXJpby4qDQoNCi0gKkNvbnNpZGVybyBxdWUgZXhpc3RlIHVuYSBvcG9ydHVuaWRhZCBpbXBvcnRhbnRlIGRlIHJlZ3VsYWNpw7NuLiBTZSBkZWJlcsOtYSBkZSBhc3BpcmFyIGEgdGVuZXIgdW4gbWFyY28gcmVndWxhdG9yaW8gcXVlIGNvbnNpZGVyZSBlbCBtb25pdG9yZW8gY29udMOtbnVvIGRlbCBzaXN0ZW1hIGZpbmFuY2llcm8geSBxdWUgYnVzcXVlIGluY2lkaXIgZW4gbG9zIGNpY2xvcyBkZSByZWZvcnphbWllbnRvIHF1ZSBhY3R1YWxtZW50ZSBnZW5lcmFuIGxhcyBidXJidWphcyBwYXJhIHByZXZlbmlybGFzLioNCg0KIyBQcm9ibGVtYSAyOiBFbXByZW5kZWRvcmVzIHkgVHJhbnNpY2lvbmVzIFRlY25vbMOzZ2ljYXMNCg0KIyMgUHJlZ3VudGFzIGRlbCBjYXNvOg0KDQoyLjEgRGVzYXJyb2xsYSB1biBkaWFncmFtYSBjYXVzYWwgZGVsIGNhc28gYW50ZXJpb3IuIElkZW50aWZpY2EgbG9zIGNpY2xvcyBkZSBjYXVzYWxpZGFkIGNpcmN1bGFyIGV4aXN0ZW50ZXMgeSByZWxldmFudGVzLiBJZGVudGlmaWNhIHN1IHBvbGFyaWRhZCAoaS5lLiBwb3NpdGl2YSwgbmVnYXRpdmEpLiBOb21icmEgZXN0b3MgY2ljbG9zIGRlIGNhdXNhbGlkYWQgY2lyY3VsYXIgZGUgdGFsIG1hbmVyYSBxdWUgc2UgZGVzY3JpYmEgc3UgZWZlY3RvIGFwcm9waWFkYW1lbnRlLg0KDQohW10oZGlhZ3JhbWFfMi5wbmcpDQoyLjIgRm9ybXVsYSB1bmEgaGlww7N0ZXNpcyBkaW7DoW1pY2Egc29icmUgZWwgY29tcG9ydGFtaWVudG8gZGVsIHNpc3RlbWEuIEVuZsOzY2F0ZSBlbiBlbCBjb21wb3J0YW1pZW50byBkZSBsYXMgdmFyaWFibGVzIHF1ZSBjb25zaWRlcmVzIHNvbiBtw6FzIHJlbGV2YW50ZXMuIERlc2NyaWJlIGdyw6FmaWNhbWVudGUgdHUgaGlww7N0ZXNpcyBkaW7DoW1pY2EuIA0KDQoqUjogTGEgaGlww7N0ZXNpcyBkaW7DoW1pY2EgcXVlIHNlIHByb3BvbmUgZXMgdW4gcmVmb3J6YW1pZW50byBkZWwgw6l4aXRvIGRlIGxhcyB0ZWNub2xvZ8OtYXMgYSB0cmF2w6lzIGRlbCB0aWVtcG8uIFNpIGJpZW4gZW4gc3VzIGFycmFucXVlcyBsYXMgdGVjbm9sb2fDrWFzIGV4aXRvc2FzIG5vIGluY3JlbWVudGFuLCBvIGluY3JlbWVudGFuIGEgdGFzYXMgbXV5IGJhamFzIGRlYmlkbyBhIGxhcyBkaW7DoW1pY2FzIGRlbCBjaWNsbyBkZSByZWZvcnphbWllbnRvIGRlIGxhIGluY2VydGlkdW1icmUsIGxhIGNlcnRpZHVtYnJlIHNlIGFtcGxpZmljYSBwYXVsYXRpbmFtZW50ZSBjb25mb3JtZSBsYSB0ZWNub2xvZ8OtYSBhZHF1aWVyZSBmb25kZW8geWEgc2VhIGRlbCBtaXNtbyBlbXByZW5kZWRvciBvIGRlIGxhcyBpbnZlcnNpb25lcyBvYnRlbmlkYXMsIGxvIGN1w6FsIG9jYXNpb25hIHF1ZSBsYXMgdGVjbm9sb2fDrWFzIGV4aXRvc2FzIGNyZXpjYW4gYSB0YXNhcyBtw6FzIGFsdGFzIGhhc3RhIGxsZWdhciBhIHVuIG3DoXhpbW8gZW4gZWwgY3XDoWwgbGEgdGVjbm9sb2fDrWEgeWEgdGllbmUgZWwgc3VmaWNpZW50ZSBmb25kZW8gcGFyYSBzYWxpciBhbCBtZXJjYWRvLiAqDQoNCiFbXShncmFmaWNhXzIyLnBuZykNCg0KMi4zIENvbnNpZGVyYSBsYSBwb3NpY2nDs24gZGUgdW5hIHNlY3JldGFyw61hIGRlIGlubm92YWNpw7NuIGN1eW8gb2JqZXRpdm8gZXMgaW5jcmVtZW50YXIgbGEgdGFzYSBkZSBkZXNhcnJvbGxvIGRlIG51ZXZhcyB0ZWNub2xvZ8OtYXMuIEVtcGxlYSBlbCBkaWFncmFtYSBkZSBzaXN0ZW1hIGRpc2N1dGlkbyBlbiBjbGFzZSBwYXJhIGlkZW50aWZpY2FyIGxhcyB2YXJpYWJsZXMgZW4gbGEgYmFycmVyYSBkZWwgc2lzdGVtYSwgbGFzIG3DqXRyaWNhcyBwYXJhIG1vbml0b3JlYXIgZWwgY3VtcGxpbWllbnRvIGRlIGRpY2hvIG9iamV0aXZvIHkgbGFzIHBvw610aWNhcyBxdWUgcG9kcsOtYW4gaW1wbGVtZW50YXJzZSBwYXJhIGluY3JlbWVudGFyIGxhIHRhc2EgZGUgZGVzYXJyb2xsbyBkZSBudWV2YXMgdGVjbm9sb2fDrWFzLiBEZXNjcmliZSBncsOhZmljYW1lbnRlIGVsIGVmZWN0byBlbiBlbCBjb21wb3J0YW1pZW50byBkZWwgc2lzdGVtYSBxdWUgY29uc2lkZXJhcyB0ZW5kcsOtYSB1bmEgZGUgbGFzIHBvbMOtdGljYXMgcXVlIGlkZW50aWZpY2FzdGUuIA0KDQoqUjogTGFzIHZhcmlhYmxlcyBpZGVudGlmaWNhZGFzIGVuIGxhIGJhcnJlcmEgZGVsIHNpc3RlbWEgc2Vyw61hbiwgZW4gY3VhbnRvIGEgdmFyaWFibGVzIGV4w7NnZW5hcywgbG9zIHJlY3Vyc29zIHF1ZSBlbCBlbXByZW5kZWRvciBwdWRpZXNlIGludmVydGlyIGVuIHN1IHByb3llY3RvLCB5IGEgbWFuZXJhIGRlIG3DqXRyaWNhIGRlIGRlc2VtcGXDsW8gc2UgcHVkaWVyYSBjb25zaWRlcmFyIGVsIMOpeGl0byBkZSBsYSB0ZWNub2xvZ8OtYS4gRW4gY3VhbnRvIGEgcG9sw610aWNhcywgdW5hIHNlY3JldGFyw61hIGRlIGlubm92YWNpw7NuIHB1ZGllcmEgb3RvcmdhciBjcsOpZGl0b3MgYSBsYSBpbm5vdmFjacOzbiB0ZWNub2zDs2dpY2EgcGFyYSBlbXByZW5kZWRvcmVzLCBsb3MgY3VhbGVzIHNlIHRyYWR1Y2lyw61hbiBlbiByZWN1cnNvcyBhZGljaW9uYWxlcyBxdWUgYWJvbmFuIGFsIGNpY2xvIGNhdXNhbCBwYXJhIHF1ZSBzdXMgdGVjbm9sb2fDrWFzIHNlYW4gZXhpdG9zYXMuIFVuIGRpYWdyYW1hIGNhdXNhbCBpbmNvcnBvcmFuZG8gZXN0YSBwb2zDrXRpY2Egc2UgdmVyw61hIGRlIGxhIHNpZ3VpZW50ZSBmb3JtYToqDQoNCiFbXShkaWFncmFtYV8yMy5wbmcpDQoqQ29tbyByZXN1bHRhZG8sIHNlIGVzcGVyYXLDrWEgY29udGFyIGNvbiB1biBjb21wb3J0YW1pZW50byBzaW1pbGFyIGEgbGEgaGlww7N0ZXNpcyBkaW7DoW1pY2EgYW50ZXJpb3IsIGNvbiBsYSBleGNlcGNpw7NuIGRlIHF1ZSBsYSBudWV2YSBoaXDDs3Rlc2lzIGRpbsOhbWljYSByZXN1bHRhcsOtYSBlbiB1bmEgbWF5b3IgdGFzYSBkZSBkZXNhcnJvbGxvIGRlIHRlY25vbG9nw61hcyBlbiB1biBtZW5vciB0aWVtcG87IGFzw60gY29tbyB1biB2YWxvciBmaW5hbCBkZSB0ZWNub2xvZ8OtYXMgZXhpdG9zYXMgbcOhcyBhbHRvIGRlbCBxdWUgc2UgdGVuZHLDrWEgc2luIGVzdGEgcG9sw610aWNhLiBMYSBncsOhZmljYSBzZSB2aXN1YWxpemFyw61hIGRlIGVzdGEgZm9ybWE6ICoNCg0KIVtdKGdyYWZpY2FfMjMucG5nKQ0KDQojIFByb2JsZW1hIDM6IFBvbMOtdGljYXMgZGUgZGVzYXJyb2xsbyB1cmJhbm8NCg0KIyMgUHJlZ3VudGFzIGRlbCBjYXNvOg0KDQozLjEgRGVzYXJyb2xsYSB1biBkaWFncmFtYSBjYXVzYWwgZGUgZXN0ZSBjYXNvICgxMCBwdW50b3MsIHByb2R1Y3RvczogZGlhZ3JhbWEgY2F1c2FsKQ0KDQohW10oZGlhZ3JhbWFfMy5wbmcpDQoNCjMuMiBFbXBsZWEgdHUgZGlhZ3JhbWEgY2F1c2FsIHBhcmEgZGVzY3JpYmlyIGdyw6FmaWNhbWVudGUgdHUgaGlww7N0ZXNpcyBkaW7DoW1pY2EgaW5pY2lhbCBzb2JyZSBsYSBkaW7DoW1pY2EgZGUgbG9zIHByZWNpb3MgZGUgbGFzIHByb3BpZWRhZGVzICgxMCBwdW50b3MsIHByb2R1Y3RvczogZGVzY3JpcGNpw7NuIGhpcMOzdGVzaXMgZGluw6FtaWNhLCBncsOhZmljbyBkZSBoaXDDs3Rlc2lzIGRpbsOhbWljYSkNCg0KKlI6IFRvbWFuZG8gY29tbyBjb25kaWNpw7NuIGluaWNpYWwgcHJlY2lvcyBhbHRvcyBkZSBiaWVuZXMgcmHDrWNlcywgZXN0b3MgZGlzbWludXllbiBhIHRhc2FzIGFsdGFzIGRlYmlkbyBhIGxhIGlueWVjY2nDs24gZGUgbnVldm9zIGRlc2Fycm9sbG9zIGlubW9iaWxpYXJpb3MgYWwgbWVyY2FkbyB5IGEgbGEgc29icmVvZmVydGEgcmVsYXRpdmEgcXVlIGVzdG8gdHJhZSBjb21vIGNvbnNlY3VlbmNpYS4gTG9zIHByZWNpb3MgYmFqb3Mgb2Nhc2lvbmFuIGluY3JlbWVudG9zIGVuIGxhIGRlbWFuZGEgZGUgYmllbmVzIHJhw61jZXMsIHF1ZSBhIHN1IHZleiByZWR1Y2UgbGEgc29icmUgb2ZlcnRhIHkgYXVtZW50YSBsb3MgcHJlY2lvcyBwYXVsYXRpbmFtZW50ZS4gTGFzIGRlc2Fycm9sbGFkb3JhcyBpZGVudGlmaWNhbiBsYSBhbHRhIGRlbWFuZGEgeSBzZSB0YXJkYW4gMi0zIGHDsW9zIGVuIGVudHJlZ2FyIHN1cyBwcm95ZWN0b3Mgc2ltdWx0w6FuZWFtZW50ZSBwYXJhIG51ZXZhbWVudGUgZGVzcGxvbWFyIGxvcyBwcmVjaW9zIGRlIGxvcyBiaWVuZXMgcmHDrWNlcy4qDQoNCipBIHBhcnRpciBkZSBlc3RlIGNvbXBvcnRhbWllbnRvLCBzZSBwcm9wb25lIHVuYSBoaXDDs3Rlc2lzIGRpbsOhbWljYSBkZSB1biBjb21wb3J0YW1pZW50byBvc2NpbGF0b3JpbyBkZWwgcHJlY2lvIGRlIGxhcyBwcm9waWVkYWRlcyBlbiBlbCB0aWVtcG87IGVsIGN1YWwgc3VmcmUgaW5jcmVtZW50b3MgcGF1bGF0aW5vcyBhIHRhc2FzIGJhamFzIG1pZW50cmFzIGVsIG1lcmNhZG8gc2UgZXF1aWxpYnJhLCB5IHNlIGRlc3Bsb21hIGEgdGFzYXMgYWx0YXMgY3VhbmRvIHN1cmdlbiBudWV2b3MgZGVzYXJyb2xsb3MgaW5tb2JpbGlhcmlvcy4qDQoNCg0KIVtdKGdyYWZpY2FfMzIucG5nKQ0KDQozLjMgwr9RdcOpIHRpcG8gZGUgcG9sw610aWNhIHBvZHLDrWEgc2VndWlyIHVuYSBjb21wYcOxw61hIGNvbnN0cnVjdG9yYSBpbnRlbGlnZW50ZT8gRW1wbGVhIGVsIGRpYWdyYW1hIGRlIHNpc3RlbWEgdmlzdG8gZW4gY2xhc2UgKGkuZS4gcG9sw610aWNhcywgZmFjdG9yZXMgZXjDs2dlbm9zLCBkaWFncmFtYSBjYXVzYWwgeSBtw6l0cmljYXMgZGUgY29tcG9ydGFtaWVudG8pIChkaWFwb3NpdGl2YSA1NiwgU2VtaW5hcmlvMSkgcGFyYSBkZXNjcmliaXIgZWwgZnVuY2lvbmFtaWVudG8gZGUgZGljaGEgcG9sw610aWNhIHkgc3UgZWZlY3RvIGVuIGVsIHNpc3RlbWEuIEdyYWZpY2EgZWwgY29tcG9ydGFtaWVudG8gZXNwZXJhZG8gZGUgZGljaGEgcG9sw610aWNhIHkgY29udHLDoXN0YWxhIGJyZXZlbWVudGUgY29uIHR1IGhpcMOzdGVzaXMgZGluw6FtaWNhIGluaWNpYWwgKDEwIHB1bnRvcywgcHJvZHVjdG9zOiBkaWFncmFtYSBkZSBzaXN0ZW1hIChkaWFwb3NpdGl2YSAzNSwgU2VtaW5hcmlvMiksIGdyw6FmaWNvIGNvbnRyYXN0YW5kbyBlbCBjb21wb3J0YW1pZW50byBkZSBsYSBwb2zDrXRpY2EgeSBsYSBoaXDDs3Rlc2lzIGRpbsOhbWljYSkuDQoNCipSOiBVbmEgY29tcGHDscOtYSBjb25zdHJ1Y3RvcmEgaW50ZWxpZ2VudGUgcHVkaWVzZSBpbXBsZW1lbnRhciB1bmEgcG9sw610aWNhIGJhc2FkYSBlbiBkZXNmYXNhciBzdXMgcHJveWVjdG9zIGNvbiByZXNwZWN0byBhbCByZXN0byBkZSBzdSBjb21wZXRlbmNpYS4gRXN0ZSBkZXNmYXNlIG9jYXNpb25hcsOtYSB1biBpbmNyZW1lbnRvIGVuIGxhIG9mZXJ0YSBlbiBlbCBzaXN0ZW1hIGN1YW5kbyBlbCBjb21wb3J0YW1pZW50byBkZWwgcHJlY2lvIHlhIGVzIGFsY2lzdGEsIHVuIHRpZW1wbyB0IGRldGVybWluYWRvIHBvc3RlcmlvciBhIGxhIGlueWVjY2nDs24gZGUgcHJveWVjdG9zIGFsIG1lcmNhZG8gcG9yIHBhcnRlIGRlIHN1IGNvbXBldGVuY2lhLiBFc3RvIG9jYXNpb25hcsOtYSBxdWUgZXN0YSBlbXByZXNhIHNlIGJlbmVmaWNpZSBkZSB2ZW5kZXIgc3VzIHByb3llY3RvcyBlbiBtb21lbnRvcyBlbiBsb3MgY3VhbGVzIGxhIG9mZXJ0YSBubyBlcyB0YW4gYWx0YSwgcG9yIGxvIGN1YWwgbGUgc2Vyw61hIHBvc2libGUgdmVuZGVybG9zIGVuIHByZWNpb3MgbcOhcyBhbHRvcyB5IGFzw60gZ2VuZXJhciBtYXlvZXMgcmVuZGltaWVudG9zIGRlIHN1cyBpbnZlcnNpb25lcy4qDQoNCipMYSBoaXDDs3Rlc2lzIGRpbsOhbWljYSBlcywgcG9yIGxvIHRhbnRvLCBkZSB1biBjb21wb3J0YW1pZW50byBvc2NpbGF0b3JpbywgY29uIHVuYSB0YXNhIGRlIGRlc3Bsb21lIGRlIGxvcyBwcmVjaW9zIHVuIHBvY28gbcOhcyBiYWphIHF1ZSBlbiBsYSBoaXDDs3Rlc2lzIGluaWNpYWw7IHkgY29uIHVuYSB0YXNhIGRlIGluY3JlbWVudG8gZGUgbG9zIHByZWNpb3MgcXVlIHNlIHZlIG1lbmd1YWRhIHBvciBsYSBlbnRyYWRhIGRlIGxvcyBwcm95ZWN0b3MgZGUgbGEgY29tcGHDscOtYSBjb25zdHJ1Y3RvcmEgaW50ZWxpZ2VudGUuKg0KDQohW10oZGlhZ3JhbWFfMzMucG5nKQ0KDQohW10oZ3JhZmljYV8zMy5wbmcpDQoNCiMgUHJvYmxlbWEgNDogTW9kZWxhbmRvIGxhIGVwaWRlbWlhIFNBUlMNCg0KIyMgUHJlZ3VudGFzIGRlbCBjYXNvOg0KDQo0LjEgSW5jbHV5ZSB0dSBtb2RlbG8gZW4gbGEgZW50cmVnYSBmaW5hbCBkZSBsYSB0YXJlYSwgbm9tYnJhIHR1IG1vZGVsbyBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOg0KVHVub21icmVfc2Fyc19tb2RlbC5SLiBUb21hIGVuIGN1ZW50YSBxdWUgZWwgbW9kZWxvIHF1ZSBlbnbDrWVzIHNlcsOhIHJldmlzYWRvIGVuIHTDqXJtaW5vcyBkZSBsYXMNCnNpbnRheGlzIGRlbCBjw7NkaWdvLCBwZXJvIGZ1bmRhbWVudGFsbWVudGUgZW4gdMOpcm1pbm9zIGRlIHN1IGZ1bmNpb25hbGlkYWQuIFVuIG1vZGVsbyBxdWUgbm8gZnVuY2lvbmUgYWwgc2VyIGVqZWN1dGFkbyBzZXLDoSBwZW5hbGl6YWRvIG5vdGFibGVtZW50ZSAoMzAgcHVudG9zLCBwcm9kdWN0b3M6IGFyY2hpdm8gY29uIGVsIG1vZGVsbykuDQoNCjQuMiDCv1F1w6kgc3VjZWRlIGN1YW5kbyBpbmljaWFsaXphcyBsYSB2YXJpYWJsZSBkZSBlc3RhZG8gIlBvcHVsYXRpb24gaW5mZWN0ZWQgd2l0aCBTQVJTIiBlbiBjZXJvPyBFeHBsaWNhIGJyZXZlbWVudGUgcXVlIG9yaWdpbmEgZWwgY29tcG9ydGFtaWVudG8gcXVlIG9ic2VydmFzLCBlbXBsZWEgbGEgZXN0cnVjdHVyYSBkZWwgbW9kZWxvIHBhcmEgY2ltZW50YXIgdHUgYXJndW1lbnRhY2nDs24gKDEwIHB1bnRvcywgcHJvZHVjdG9zOiBncsOhZmljbyBkZSBzaW11bGFjacOzbiB5IGJyZXZlIGRlc2NyaXBjacOzbikuDQoNCipSOiBTaSBsYSB2YXJpYWJsZSBkZSBwb2JsYWNpw7NuIGluZmVjdGFkYSBjb24gU0FSUyBlcyBpbmljaWFsaXphZGEgY29uIHZhbG9yIGRlIGNlcm8sIG5vIGV4aXN0aXLDrWEgdW4gInBhY2llbnRlIGNlcm8iIGVuIG5pbmfDum4gcHVudG8gZGVsIHRpZW1wbyBxdWUgZGlzZW1pbmFyw61hIGVsIHZpcnVzLCBjb21lbnphbmRvIGxhIHBhbmRlbWlhLiBQb3IgbG8gdGFudG8sIHNlIHB1ZWRlIGFwcmVjaWFyIHF1ZSBsYSBwb2JsYWNpw7NuIHN1c2NlcHRpYmxlIGFsIFNBUlMgc2UgbWFudGllbmUgZW4gc3UgdmFsb3Igb3JpZ2luYWwgZGUgMzUwLCBtaWVudHJhcyBxdWUgbGEgcG9ibGFjacOzbiBpbmZlY3RhZGEgY29uIFNBUlMgZW4gbmluZ8O6biBwdW50byBpbmNyZW1lbnRhIHN1IHZhbG9yIHBvciBlbmNpbWEgZGUgMC4gKg0KDQohW10oZ3JhZmljYXNfNDIucG5nKQ0KDQo0LjMgwr9Dw7NtbyBjYW1iaWEgbGEgZGluw6FtaWNhIGRlIGNvbXBvcnRhbWllbnRvIGRlbCBtb2RlbG8gc2kgaW5pY2lhbGl6YXMgZXN0YSB2YXJpYWJsZSBkZSBlc3RhZG8gYSB1biB2YWxvciBwb3NpdGl2byBkaWZlcmVudGUgZGUgY2Vybz8NCg0KKlI6IEFsIGluaWNpYWxpemFyIGxhIHZhcmlhYmxlIGRlIGVzdGFkbyBgcG9wdWxhdGlvbi5pbmZlY3RlZC53aXRoLlNBUlNgIGVuIHVuIHZhbG9yIHBvc2l0aXZvIGRpZmVyZW50ZSBkZSBjZXJvLCBzZSB0aWVuZW4gdmFyaW9zIGVmZWN0b3M6Kg0KDQotICpFbCBjcmVjaW1pZW50byBlbiBlbCBuw7ptZXJvIGRlIGNvbnRhZ2lvcyBzZSBkYSBkZSBmb3JtYSBtw6FzIGFzY2VsZXJhZGEgY29uZm9ybWUgc2UgaW5jcmVtZW50YSBlbCB2YWxvciBpbmljaWFsIGRlIGxhIHZhcmlhYmxlIGRlIGVzdGFkby4qDQotICpDb25zaWRlcmFuZG8gcXVlIG5vIHNlIGFsdGVyw7MgbGEgdmFyaWFibGUgZGUgZXN0YWRvIGBwb3B1bGF0aW9uLnN1c2NlcHRpYmxlLnRvLlNBUlNgLCBlbCBlcXVpbGlicmlvIGVuIGxhIGNhbnRpZGFkIGRlIHBhY2llbnRlcyBpbmZlY3RhZG9zIHNlIGRhIGVuIHVuIHZhbG9yIHF1ZSBlcyBpZ3VhbCBhIGxhIHN1bWEgZGUgbGEgcG9ibGFjacOzbiBpbmZlY3RhZGEgY29uIFNBUlMgeSBkZSBsYSBwb2JsYWNpw7NuIHN1c2NlcHRpYmxlIGEgaW5mZWN0YXJzZSBjb24gU0FSUzsgYW1iYXMgZW4gdGllbXBvIGNlcm8uKg0KDQoqUG9yIGVqZW1wbG86IHNpIHNlIGluaWNpYWxpemEgbGEgYHBvcHVsYXRpb24uaW5mZWN0ZWQud2l0aC5TQVJTYCBjb24gdW4gdmFsb3IgZGUgMSwgcG9kZW1vcyBhcHJlY2lhciBlbiBsYXMgZ3LDoWZpY2FzIHF1ZSBzZSBsbGVnYSBhbCBlcXVpbGlicmlvIG3DoXMgYWRlbGFudGUgZW4gZWwgdGllbXBvIHF1ZSBzaSBlc3RhIG1pc21hIHZhcmlhYmxlIHNlIGluaWNpYWxpemEgY29uIHVuIHZhbG9yIGRlIDUwOyBtYW50ZW5pZW5kbyBsYSBgcG9wdWxhdGlvbi5zdXNjZXB0aWJsZS50by5TQVJTYCBjb25zdGFudGUuIFRhbWJpw6luIHBvZGVtb3MgYXByZWNpYXIgcXVlIGVsIHZhbG9yIGZpbmFsIGRlIGVxdWlsaWJyaW8gZGUgYHBvcHVsYXRpb24uaW5mZWN0ZWQud2l0aC5TQVJTYCBzZSBkYSBlbiB1biB2YWxvciBkZSAzNTEgZW4gZWwgcHJpbWVyIGNhc28sIG1pZW50cmFzIHF1ZSBlbiBlbCBzZWd1bmRvIGNhc28gc2UgZGEgZW4gdW4gdmFsb3IgZGUgNDAwLioNCg0KKipHcsOhZmljYXMgaW5pY2lhbGl6YWRhcyBjb24gYHBvcHVsYXRpb24uaW5mZWN0ZWQud2l0aC5TQVJTYCA9IDEqKg0KIVtdKGdyYWZpY2FzMV80My5wbmcpDQoNCioqR3LDoWZpY2FzIGluaWNpYWxpemFkYXMgY29uIGBwb3B1bGF0aW9uLmluZmVjdGVkLndpdGguU0FSU2AgPSA1MCoqDQohW10oZ3JhZmljYXM1MF80My5wbmcpDQoNCjQuNCDCv0PDs21vIGNhbWJpYSBsYSBkaW7DoW1pY2EgZGVsIHNpc3RlbWEgc2kgYXVtZW50YSBlbCB2YWxvciBkZWwgcGFyw6FtZXRybyAiQ29udGFjdCBGcmVxdWVuY3kiPyDCv0VsIHZhbG9yIGRlIGVzdGUgcGFyw6FtZXRybyBtb2RpZmljYSBlbCB2YWxvciBmaW5hbCBkZSBsYSB2YXJpYWJsZSBkZSBlc3RhZG8gIlBvcHVsYXRpb24gSW5mZWN0ZWQgd2l0aCBTQVJTIj8gRXhwbGljYSBwb3JxdWUgc8OtIG8gcG9ycXVlIG5vIGhhY2llbmRvIHJlZmVyZW5jaWEgYSBsYSBlc3RydWN0dXJhIGRlbCBtb2RlbG8geSBhIGxvcyByZXN1bHRhZG9zIGRlIGxhIHNpbXVsYWNpw7NuICgxMCBwdW50b3MsIHByb2R1Y3RvczogZ3LDoWZpY28gY29uIHJlc3VsdGFkb3MgZGUgc2ltdWxhY2nDs24geSBkZXNjcmlwY2nDs24gZGUgcmVzdWx0YWRvcykuDQoNCipSOiBFbCBpbmNyZW1lbnRvIGVuIGVsIHBhcsOhbWV0cm8gYENvbnRhY3QuZnJlcXVlbmN5YCBjYW1iaWEgbGEgZGluw6FtaWNhIGRlbCBtb2RlbG8sIHB1ZXMgdnVlbHZlIGVsIGNyZWNpbWllbnRvIGRlIGxhIHZhcmlhYmxlIGRlIGVzdGFkbyBgcG9wdWxhdGlvbi5pbmZlY3RlZC53aXRoLlNBUlNgIG3DoXMgYWNlbGVyYWRvLCBhc8OtIGNvbW8gZWwgY29sYXBzbyBkZSBsYSB2YXJpYWJsZSBkZSBlc3RhZG8gYHBvcHVsYXRpb24uc3VzY2VwdGlibGUudG8uU0FSU2AuIEVzdG8gc2UgZGEgZGViaWRvIGEgbGEgcG9sYXJpZGFkIHBvc2l0aXZhIHF1ZSB0aWVuZSBlbCBlbmxhY2UgZGUgZXN0ZSBwYXLDoW1ldHJvIGNvbiBsYXMgdmFyaWFibGVzIHN1YnNlY3VlbnRlcyBlbiBlbCBjaWNsbyBkZSBgRGVwbGV0aW9uYCBoYXN0YSBsbGVnYXIgYSBsYSB2YXJpYWJsZSBkZSBmbHVqbyBgSW5mZWN0aW9uLlJhdGVgLiBTaW4gZW1iYXJnbywgbG9zIHZhbG9yZXMgZGUgZXF1aWxpYnJpbyBkZSBhbWJhcyB2YXJpYWJsZXMgZGUgZXN0YWRvIG5vIHNlIHZlbiBhbHRlcmFkb3MgcG9yIGxvcyBjYW1iaW9zIGVuIGVzdGUgcGFyw6FtZXRybywgcHVlcyBlc3RvcyB2YWxvcmVzIGVzdMOhbiBsaW1pdGFkb3MgcG9yIGVsIHRvdGFsIGRlIGxhIGBwb3B1bGF0aW9uLnN1c2NlcHRpYmxlLnRvLlNBUlNgIGNvbiBsYSBjdWFsIHNlIGluaWNpYWxpemEgZWwgbW9kZWxvOyBxdWUgZW4gZXN0ZSBjYXNvIGVzIHVuYSBjYW50aWRhZCBmaW5pdGEgZGUgMzUwIHBlcnNvbmFzLioNCg0KKipHcsOhZmljYXMgY29uIHZhbG9yIGRlbCBwYXLDoW1ldHJvIGBDb250YWN0LmZyZXF1ZW5jeWAgPSAyKioNCiFbXShncmFmaWNhczFfNDMucG5nKQ0KDQoqKkdyw6FmaWNhcyBjb24gdmFsb3IgZGVsIHBhcsOhbWV0cm8gYENvbnRhY3QuZnJlcXVlbmN5YCA9IDQqKg0KIVtdKGdyYWZpY2FzNF80NC5wbmcpDQoNCioqR3LDoWZpY2FzIGNvbiB2YWxvciBkZWwgcGFyw6FtZXRybyBgQ29udGFjdC5mcmVxdWVuY3lgID0gOCoqDQohW10oZ3JhZmljYXM4XzQ0LnBuZykNCg0KNC41IMK/Q8OzbW8gY2FtYmlhIGVsIGNvbXBvcnRhbWllbnRvIGRlbCBtb2RlbG8gc2kgbGEgdmFyaWFibGUgZGUgZmx1am8gIkluZmVjdGlvbiBSYXRlIiBjYW1iaWE/IFNpZ3VlIGxvcyBzaWd1aWVudGVzIGxpbmVhbWllbnRvcyBwYXJhIGRhciB0dSByZXNwdWVzdGE6IFJlc3BvbmRlIGEgZXN0YSBwcmVndW50YSBkZXNjcmliaWVuZG8gYnJldmVtZW50ZSBsb3MgY2FtYmlvcyBxdWUgaWRlbnRpZmljYXMgYWwgY2FtYmlhciBlbCB2YWxvciBkZSBlc3RhIHZhcmlhYmxlLiBFbXBsZWEgdW4gcGFyIGRlIGdyw6FmaWNvcyBkZSBjb21wb3J0YW1pZW50byBkZWwgbW9kZWxvIHBhcmEgZGFyIHNvcG9ydGUgYSB0dSByZXNwdWVzdGEuICgxMCBwdW50b3MsIHByb2R1Y3RvczogZ3LDoWZpY28gY29uIHJlc3VsdGFkb3MgZGUgc2ltdWxhY2nDs24geSBkZXNjcmlwY2nDs24gZGUgcmVzdWx0YWRvcykuDQoNCipSOiBMYSB2YXJpYWJsZSBkZSBmbHVqbyBgSW5mZWN0aW9uLlJhdGVgLCBkZSBhY3VlcmRvIGNvbiBlbCBtb2RlbG8sIGVzdMOhIGluZmx1ZW5jaWFkYSBwb3NpdGl2YW1lbnRlIHBvciBsYSB2YXJpYWJsZSBgQ29udGFjdHMuYmV0d2Vlbi5JbmZlY3RlZC5hbmQuVW5pbmZlY3RlZC5QZW9wbGVgIHkgcG9yIGVsIHBhcsOhbWV0cm8gYEluZmVjdGl2aXR5YDsgcG9yIGxvIHF1ZSBwYXJhIGZpbmVzIGRlIGVzdGUgZWplcmNpY2lvIHNlIGFsdGVyw7MgZWwgcGFyw6FtZXRybyBgSW5mZWN0aXZpdHlgIHBhcmEgaW5jaWRpciBlbiBgSW5mZWN0aW9uLlJhdGVgIHkgbW9kZWxhciBzdXMgY2FtYmlvcy4qDQoNCipBbCBkdXBsaWNhciBlbCBwYXLDoW1ldHJvIGBJbmZlY3Rpdml0eWAsIGluY3JlbWVudGFuZG8gYXPDrSBsYSB2YXJpYWJsZSBkZSBmbHVqbyBgSW5mZWN0aW9uLlJhdGVgIHRhbWJpw6luIGFsIGRvYmxlLCBzZSBhcHJlY2lhIHVuIGluY3JlbWVudG8gZW4gbGEgdGFzYSBkZSBjb250YWdpb3MgcXVlIHJlc3VsdGEgZW4gcXVlIHNlIGxsZWdhIGFsIG3DoXhpbW8gZGUgcGFjaWVudGVzIGluZmVjdGFkb3MgZW4gbWVub3IgdGllbXBvLiBQb3Igb3RybyBsYWRvLCBhbCByZWR1Y2lyIGEgbGEgbWl0YWQgZWwgcGFyw6FtZXRybyBgSW5mZWN0aXZpdHlgIHJlZHVjaWVuZG8gdGFtYmnDqW4gYSBsYSBtaXRhZCBsYSB2YXJpYWJsZSBkZSBmbHVqbyBgSW5mZWN0aW9uLlJhdGVgOyBzZSBhcHJlY2lhIHF1ZSBoYXkgdW5hIHJlZHVjY2nDs24gaW1wb3J0YW50ZSBlbiBsYSB0YXNhIGRlIGNvbnRhZ2lvcyB5IHF1ZSBlbiBlbCB0cmFuc2N1cnNvIGRlbCB0aWVtcG8gZGVsIG1vZGVsbyBkZSAxMjAgZMOtYXMgYXBlbmFzIHNlIGxsZWdhIGFsIG3DoXhpbW8gZGUgcGVyc29uYXMgaW5mZWN0YWRhcy4gRXMgaW1wb3J0YW50ZSBhY2xhcmFyIHF1ZSBsb3MgdmFsb3JlcyBkZSBlcXVpbGlicmlvIGRlIGxhcyB2YXJpYWJsZXMgZGUgZXN0YWRvIGBwb3B1bGF0aW9uLmluZmVjdGVkLndpdGguU0FSU2AgeSBkZSBgcG9wdWxhdGlvbi5zdXNjZXB0aWJsZS50by5TQVJTYCBubyBzZSB2ZW4gYWZlY3RhZG9zIHBvciBlc3RvcyBjYW1iaW9zLioNCg0KKipHcsOhZmljYXMgY29uIHZhbG9yIGRlIGxhIHZhcmlhYmxlIGRlIGZsdWpvIGBJbmZlY3Rpb24uUmF0ZWAgaW5pY2lhbCoqDQoNCiFbXShncmFmaWNhczFfNDMucG5nKQ0KDQoqKkdyw6FmaWNhcyBjb24gdmFsb3IgZGUgbGEgdmFyaWFibGUgZGUgZmx1am8gYEluZmVjdGlvbi5SYXRlYCBkdXBsaWNhZG8qKg0KDQohW10oZ3JhZmljYXMyXzQ1LnBuZykNCg0KKipHcsOhZmljYXMgY29uIHZhbG9yIGRlIGxhIHZhcmlhYmxlIGRlIGZsdWpvIGBJbmZlY3Rpb24uUmF0ZWAgcmVkdWNpZG8gYSBsYSBtaXRhZCoqDQoNCiFbXShncmFmaWNhczAsNV80NS5wbmcpDQoNCjQuNiBFbCBtb2RlbG8gcXVlIGhhcyBkZXNhcnJvbGxhZG8gc2lndWllbmRvIGVsIHR1dG9yaWFsIGFudGVyaW9yIGVzIGRlbWFzaWFkbyBzaW1wbGUuIEJyZXZlbWVudGUgY3JpdGljYSBsYSBmb3JtdWxhY2nDs24geSBlc3RydWN0dXJhIGRlbCBtb2RlbG8geSBsaXN0YSBsYXMgc3Vwb3NpY2lvbmVzIGRlbCBtb2RlbG8gcXVlIGNvbnNpZGVyYXMgc29uIGlycmVhbGlzdGFzLiBVbm8gbyBkb3MgcMOhcnJhZm9zIHNvbiBtw6FzIHF1ZSBzdWZpY2llbnRlcyBwYXJhIHJlc3BvbmRlciBlc3RlIHB1bnRvICgxMCBwdW50b3MsIHByb2R1Y3RvczogcmVzcHVlc3RhIHRleHR1YWwpLg0KDQoqUjogRWwgbW9kZWxvLCB0YWwgY29tbyBlc3TDoSBmb3JtdWxhZG8sIHN1cG9uZSBxdWUgYXF1ZWxsb3MgcXVlIHNvbiBpbmZlY3RhZG9zIHNlIG1hbnRpZW5lbiBpbmZlY3RhZG9zIGluZGVmaW5pZGFtZW50ZTsgZW4gbHVnYXIgZGUgcHJvcG9uZXIgcXVlIGFxdWVsbG9zIHBhY2llbnRlcyBpbmZlY3RhZG9zIHB1ZWRlbiByZWN1cGVyYXJzZSBvIGZhbGxlY2VyLCBsbyBjdWFsIGxvcyByZXN0YXLDrWEgZGUgbGEgdmFyaWFibGUgZGUgZXN0YWRvIGRlIHBlcnNvbmFzIGluZmVjdGFkYXMgY29uIFNBUlMgeSwgZW4gZWwgc2VndW5kbyBjYXNvLCBsb3MgcmVzdGFyw61hIHRhbWJpw6luIGRlIGxhIHZhcmlhYmxlIGF1eGlsaWFyIGRlIHBvYmxhY2nDs24gdG90YWwuIEluY2x1c28sIGNvbnNpZGVyYW5kbyBhIGxvcyBwYWNpZW50ZXMgcmVjdXBlcmFkb3MsIGVsIG1vZGVsbyB0YW1wb2NvIGNvbnNpZGVyYSBxdWUgZXN0b3MgcHVlZGVuIHZvbHZlcnNlIG51ZXZhbWVudGUgc3VzY2VwdGlibGVzIGEgYWRxdWlyaXIgZWwgU0FSUyBkZXNwdcOpcyBkZSBhbGfDum4gcGVyaW9kbyBwcm9tZWRpbyBkZSBpbm11bmlkYWQgYWRxdWlyaWRhIGEgcGFydGlyIGRlIHN1IGluZmVjY2nDs24uKg0KDQpEZXNwdcOpcyBkZSBhZ3JlZ2FyIGxhIHZhcmlhYmxlIGRlIGVzdGFkbyBgcG9wdWxhdGlvbi5yZWNvdmVyZWQuZnJvbS5TQVJTYCwgbGEgdmFyaWFibGUgZGUgZmx1am8gYFJlY292ZXJ5LlJhdGVgIHkgZWwgcGFyw6FtZXRybyBgQXZlcmFnZS5EdXJhdGlvbi5vZi5JbmZlY3Rpdml0eWA6DQoNCjQuNyDCv0RlIHF1w6kgbWFuZXJhIGNhbWJpYSBlbCBjb21wb3J0YW1pZW50byBkZSBsYSBlcGlkZW1pYSB1bmEgdmV6IHF1ZSBhZ3JlZ2FzIGVzdGFzIG51ZXZhcyB2YXJpYWJsZXMgYWwgbW9kZWxvPyAoMTAgcHVudG9zLCBwcm9kdWN0b3M6IG51ZXZhIHZlcnNpw7NuIGRlbCBtb2RlbG8sIGdyw6FmaWNvcyBjb24gY29tcG9ydGFtaWVudG8gZGUgbGFzIHRyZXMgdmFyaWFibGVzIGRlIGVzdGFkbykuDQoNCipSOioNCg0KKipHcsOhZmljYXMgYWdyZWdhbmRvIGxhIHZhcmlhYmxlIGRlIGVzdGFkbyBgcG9wdWxhdGlvbi5yZWNvdmVyZWQuZnJvbS5TQVJTYCwgbGEgdmFyaWFibGUgZGUgZmx1am8gIGBSZWNvdmVyeS5SYXRlYCB5IGVsIHBhcsOhbWV0cm8gYEF2ZXJhZ2UuRHVyYXRpb24ub2YuSW5mZWN0aXZpdHlgKioNCg0KIVtdKGdyYWZpY2FzXzQ3LnBuZykNCg0KIDQuOCBEZXNjcmliZSBncsOhZmljYW1lbnRlIHkgY29uIHVuIGJyZXZlIHRleHRvIGVsIGVmZWN0byBlbiBlbCBzaXN0ZW1hIGRlIGNhbWJpb3MgKGkuZS4gaW5jcmVtZW50byB5IGRlY3JlbWVudG8pIGRlIGxhcyBzaWd1aWVudGVzIHZhcmlhYmxlczogImNvbnRhY3QgZnJlcXVlbmN5IiB5ICJpbmZlY3Rpdml0eSIuIEVuZmF0aXphIGVuIGxhcyBkaWZlcmVuY2lhcyBxdWUgcGVyY2liZXMgY29uIHJlc3BlY3RvIGRlbCBjb21wb3J0YW1pZW50byBkZWwgbW9kZWxvIGJhc2UuIFNlIGNvbmNpc0AgeSBicmV2ZSBlbiB0dSBkZXNjcmlwY2nDs24gdGV4dHVhbCB5IGdyw6FmaWNhICgxMCBwdW50b3MsIHByb2R1Y3RvczogZGVzY3JpcGNpw7NuIGRlIGNvbXBvcnRhbWllbnRvLCBncsOhZmljb3MgZGVzY3JpYmllbmRvIGVsIGNvbXBvcnRhbWllbnRvIGRlbCBtb2RlbG8pDQogDQoqUjogUGFyYSBmaW5lcyBkZSBpbHVzdHJhciBlbCBlZmVjdG8gZGUgbG9zIGluY3JlbWVudG9zIHkgZGVjcmVtZW50b3MgZW4gbG9zIHBhcsOhbWV0cm9zIGBDb250YWN0LkZyZXF1ZW5jeWAgZSBgSW5mZWN0aXZpdHlgLCBzZSBvcHTDsyBwb3IgZHVwbGljYXIgeSByZWR1Y2lyIGFtYm9zIHBhcsOhbWV0cm9zIGEgbGEgbWl0YWQgZW4gZGlmZXJlbnRlcyBlc2NlbmFyaW9zIHkgbWFudGVuaWVuZG8gZWwgb3RybyBwYXLDoW1ldHJvIGNvbnN0YW50ZSwgbG8gY3XDoWwgcmVzdWx0w7MgZW4gdW4gdG90YWwgZGUgNCBlc2NlbmFyaW9zIGFkZW3DoXMgZGVsIGVzY2VuYXJpbyBiYXNlLioNCg0KKkNvbW8gc2UgcHVlZGUgYXByZWNpYXIgZW4gbGFzIGdyw6FmaWNhcyBpbmNsdWlkYXMgYSBjb250aW51YWNpw7NuLCBlbCBkdXBsaWNhciBjdWFscXVpZXJhIGRlIGxvcyBkb3MgcGFyw6FtZXRyb3MgcmVzdWx0YSBlbiB1biBlZmVjdG8gZHVwbGljYXRpdm8gZGUgbGEgdmFyaWFibGUgZGUgZmx1am8gYEluZmVjdGlvbi5SYXRlYC4gRXN0byBub3MgZGEgY29tbyBjb25zZWN1ZW5jaWEgYSBzdSB2ZXogdW5hIGNhw61kYSBtw6FzIGFjZWxlcmFkYSBlbiBsYSBgcG9wdWxhdGlvbi5zdXNjZXB0aWJsZS50by5TQVJTYCwgdW4gdmFsb3IgbcOheGltbyBkZSBgcG9wdWxhdGlvbi5pbmZlY3RlZC53aXRoLlNBUlNgIG3DoXMgYWx0byBxdWUgZW4gZWwgY2FzbyBiYXNlIHF1ZSBlcyBhbGNhbnphZG8gZW4gbWVub3IgdGllbXBvLCB5IHVuYSBzdWJzZWN1ZW50ZSB0YXNhIGRlIHJlY3VwZXJhY2nDs24gbcOhcyBhbHRhIHF1ZSB0cmFlIGNvbnNpZ28gdW5hIG1heW9yIGNhbnRpZGFkIGRlIGBwb3B1bGF0aW9uLnJlY292ZXJlZC5mcm9tLlNBUlNgIGVuIG1lbm9yIHRpZW1wbyBxdWUgZW4gZWwgY2FzbyBiYXNlLioNCg0KKlBvciBvdHJvIGxhZG8sIGVsIHJlZHVjaXIgcG9yIGxhIG1pdGFkIGN1YWxxdWllcmEgZGUgbG9zIGRvcyBwYXLDoW1ldHJvcyByZXN1bHRhIGVuIHVuYSByZWR1Y2Npw7NuIHBvciBsYSBtaXRhZCBkZSBsYSB2YXJpYWJsZSBkZSBmbHVqbyBgSW5mZWN0aW9uLlJhdGVgLiBFc3RvIG5vcyBkYSBjb21vIGNvbnNlY3VlbmNpYSBhIHN1IHZleiB1bmEgY2HDrWRhIG1lbm9zIGFjZWxlcmFkYSBlbiBsYSBgcG9wdWxhdGlvbi5zdXNjZXB0aWJsZS50by5TQVJTYCwgdW4gdmFsb3IgbcOheGltbyBkZSBgcG9wdWxhdGlvbi5pbmZlY3RlZC53aXRoLlNBUlNgIHF1ZSBubyBzZSBhbGNhbnphIGVuIGVsIHRyYW5zY3Vyc28gZGVsIHRpZW1wbyBlc3R1ZGlhZG8gZW4gZWwgbW9kZWxvIHBlcm8gcXVlIHNlZ3VyYW1lbnRlIHNlcsOtYSBtZW5vciBxdWUgZW4gY2FzbyBiYXNlLCB5IHVuYSBzdWJzZWN1ZW50ZSB0YXNhIGRlIHJlY3VwZXJhY2nDs24gbcOhcyBiYWphIHF1ZSB0cmFlIGNvbnNpZ28gdW5hIG1lbm9yIGNhbnRpZGFkIGRlIGBwb3B1bGF0aW9uLnJlY292ZXJlZC5mcm9tLlNBUlNgIGVuIG1heW9yIHRpZW1wbyBxdWUgZW4gZWwgY2FzbyBiYXNlLioNCg0KKkhhY2llbmRvIHJlZmVyZW5jaWEgYWwgZGlhZ3JhbWEgc3RvY2stZmxvdyB5IGFsIG1pc21vIG1vZGVsbywgZXMgaW1wb3J0YW50ZSByZXNhbHRhciBxdWUgbG9zIG1pc21vcyBjYW1iaW9zIGVuIGxvcyBwYXLDoW1ldHJvcyBgQ29udGFjdC5GcmVxdWVuY3lgIGUgYEluZmVjdGl2aXR5YCB0aWVuZW4gZWwgbWlzbW8gZWZlY3RvIGVuIGVsIGNvbXBvcnRhbWllbnRvIGRlbCBtb2RlbG8gZGViaWRvIGEgbGEgcHJvcG9yY2lvbmFsaWRhZCBkZSBlc3RvcyBwYXLDoW1ldHJvcyBjb24gbGEgdmFyaWFibGUgZGUgZmx1am8gYEluZmVjdGlvbi5SYXRlYC4qDQogDQoqKkdyw6FmaWNhcyBjb24gdmFsb3JlcyBpbmljaWFsZXMgZGUgYENvbnRhY3QuRnJlcXVlbmN5YCA9IDIgeSBkZSBgSW5mZWN0aXZpdHlgID0gMCwxKioNCg0KIVtdKGdyYWZpY2FzXzQ3LnBuZykNCg0KKipHcsOhZmljYXMgY29uIHZhbG9yZXMgZGUgYENvbnRhY3QuRnJlcXVlbmN5YCA9IDIgeSBkZSBgSW5mZWN0aXZpdHlgID0gMCwwNSoqDQoNCiFbXShncmFmaWNhc2luZjAsMDVfNDgucG5nKQ0KDQoqKkdyw6FmaWNhcyBjb24gdmFsb3JlcyBkZSBgQ29udGFjdC5GcmVxdWVuY3lgID0gMiB5IGRlIGBJbmZlY3Rpdml0eWAgPSAwLDIqKg0KDQohW10oZ3JhZmljYXNpbmYwLDJfNDgucG5nKQ0KDQoqKkdyw6FmaWNhcyBjb24gdmFsb3JlcyBkZSBgQ29udGFjdC5GcmVxdWVuY3lgID0gMSB5IGRlIGBJbmZlY3Rpdml0eWAgPSAwLDEqKg0KDQohW10oZ3JhZmljYXNjZjFfNDgucG5nKQ0KDQoqKkdyw6FmaWNhcyBjb24gdmFsb3JlcyBkZSBgQ29udGFjdC5GcmVxdWVuY3lgID0gNCB5IGRlIGBJbmZlY3Rpdml0eWAgPSAwLDEqKg0KDQohW10oZ3JhZmljYXNjZjRfNDgucG5nKQ0KDQojIFByb2JsZW1hIDU6IENyZWNpbWllbnRvIHkgY29sYXBzbw0KDQojIFByZWd1bnRhcyBkZWwgY2Fzbw0KDQo1LjEgQ29uc3RydXllIHVuIG1vZGVsbyBkZSBkaW7DoW1pY2EgZGUgc2lzdGVtYXMgZGUgZXN0ZSBjYXNvIGRlIGVzdHVkaW8uIE5vdGEsIGxhcyB2YXJpYWJsZXMgZGVsIG1vZGVsbyBzZSBpbmRpY2FuIGVuIGl0w6FsaWNhcy4gRW1wbGVhIGVzdGEgYXl1ZGEgcGFyYSBjb25zdHJ1aXIgdHUgbW9kZWxvICgzMCBwdW50b3MsIHByb2R1Y3RvczogbW9kZWxvIGVuIFIsIG1hbmRlIHR1IG1vZGVsbyBjb24gbGEgdmVyc2nDs24gZmluYWwgZGUgdHUgdGFyZWEsIGVtcGxlYSBlbCBzaWd1aWVudGUgZm9ybWF0byBwYXJhIG5vbWJyYXIgdHUgbW9kZWxvOiBUdU5vbWJyZV9jcmVjaW1pZW50b19jb2xhcHNvLlIpDQoNCjUuMiBEZXNjcmliZSB0ZXh0dWFsbWVudGUgdHUgaGlww7N0ZXNpcyBkaW7DoW1pY2EuICgxMCBwdW50b3MsIHByb2R1Y3RvczogZGVzY3JpcGNpw7NuIGhpcMOzdGVzaXMgZGluw6FtaWNhKS4NCg0KKlI6IExhIGhpcMOzdGVzaXMgY29uc2lzdGUgZGUgdW4gbW9kZWxvIGRlIGNyZWNpbWllbnRvIHkgY29sYXBzbyBkZSBsYSBwb2JsYWNpw7NuIHkgZGUgbG9zIHJlY3Vyc29zIHJlbm92YWJsZXMsIGVuIGVsIGN1YWwgbGEgdmFyaWFibGUgZGUgZXN0YWRvIGBwb3B1bGF0aW9uYCBjcmVjZSBhIHVuYSB0YXNhIG1vZGVyYWRhIG1pZW50cmFzIGxhIHRhc2EgZGUgcmVnZW5lcmFjacOzbiBkZSBsb3MgcmVjdXJzb3MgcmVub3ZhYmxlcyBgcmVnZW5lcmF0aW9uYCBlcyBsaWdlcmFtZW50ZSBtZW5vciBhbCB1c28gZGUgcmVjdXJzb3MgcmVub3ZhYmxlcyBgcmVzb3VyY2UudXNlYDsgcG9yIGxvIGN1YWwgc2UgZGVub3RhIHVuIGNvbXBvcnRhbWllbnRvIGxpZ2VyYW1lbnRlIGJhamlzdGEgZW4gbGEgdmFyaWFibGUgZGUgZXN0YWRvIGByZW5ld2FibGUgcmVzb3VyY2VzYC4gU2luIGVtYmFyZ28sIGVuIHVuIG1vbWVudG8gZW4gZWwgdGllbXBvLCBsYSBkaWZlcmVuY2lhIGVudHJlIGxhcyB2YXJhaWJsZXMgZGUgZmx1am8gYHJlZ2VuZXJhdGlvbmAgeSBgcmVzb3VyY2UudXNlYCBjYXVzYW4gdW5hIGNhw61kYSBlbiBsYSB2YXJpYWJsZSBkZSBlc3RhZG8gYHJlbmV3YWJsZSByZXNvdXJjZXNgOyBsbyBjdWFsIG9jYXNpb25hIHF1ZSBlbCBwcm9jZXNvIGRlIHJlZ2VuZXJhY2nDs24gc2VhIG11Y2hvIG3DoXMgbGVudG8uIEVzdG8gZ2VuZXJhIHVuIGNvbGFwc28gZGUgbG9zIGByZW5ld2FibGUgcmVzb3VyY2VzYCB5IHVuIGNvbGFwc28gc3Vic2VjdWVudGUgZW4gbGEgYHBvcHVsYXRpb25gIGRlYmlkbyBhIHN1IGRlcGVuZGVuY2lhIGRlIGxvcyByZWN1cnNvcyByZW5vdmFibGVzIHBhcmEgc29icmV2aXZpci4qDQoNCjUuMyBFbXBsZWEgdHUgbW9kZWxvIHBhcmEgbW9zdHJhciBsYSBkaW7DoW1pY2EgZGUgY29tcG9ydGFtaWVudG8gZGVsIG1vZGVsbyBjdWFuZG8gbGEgdmFyaWFibGUgIm1pbmltdW0gcmVnZW5lcmF0aW9uIHJhdGUiIGVzIGlndWFsIGEgMTAlIHBvciBhw7FvLiAoMjAgcHVudG9zOiBkZXNjcmlwY2nDs24gdGV4dHVhbCB5IGdyw6FmaWNhIGRlbCBjb21wb3J0YW1pZW50byBkZWwgc2lzdGVtYSkuDQoNCipSOiBQYXJhIGlsdXN0cmFyIG1lam9yIGVzdGUgZWplcmNpY2lvLCBzZSBtb2RpZmljw7MgbGEgZXNjYWxhIGRlIHRpZW1wbyBkZWwgbW9kZWxvIGhhc3RhIDIwMCBhw7Fvcy4qDQoNCipMYSB2YXJpYWJsZSBkZSBmbHVqbyBgcmVnZW5lcmF0aW9uYCBjb25zdGEgZGUgZG9zIGNvbXBvbmVudGVzOyBsb3MgY3VhbGVzIHNvbiBsYXMgdmFyaWFibGVzIGF1eGlsaWFyZXMgYHJlc291cmNlLmRlcGVuZGVudC5yZWdlbmVyYXRpb25gLCBxdWUgZXMgbGEgcmVnZW5lcmFjacOzbiBkZSByZWN1cnNvcyBxdWUgZGVwZW5kZSBkZSBsYSBleGlzdGVuY2lhIGRlIGxvcyBtaXNtb3MsIHkgYG1pbmltdW0ucmVnZW5lcmF0aW9uYCBxdWUgZXMgbGEgcmVnZW5lcmFjacOzbiBkZSByZWN1cnNvcyBxdWUgZXMgaW5kZXBlbmRpZW50ZSBkZSBsYSBleGlzdGVuY2lhIGRlIGxvcyBtaXNtb3MuIFNpZ3VpZW5kbyBlc2UgcHJpbmNpcGlvLCBzaSBzZSBpbmNyZW1lbnRhIGRlIDElIGEgMTAlIGVsIHZhbG9yIGRlIGBtaW5pbXVtLnJlZ2VuZXJhdGlvbi5yYXRlYCwgcXVlIGVzIGRpcmVjdGFtZW50ZSBwcm9wb3JjaW9uYWwgYSBgbWluaW11bS5yZWdlbmVyYXRpb25gLCBzZSB0ZW5kcsOtYSB1bmEgcmVnZW5lcmFjacOzbiBtdWNobyBtw6FzIGltcG9ydGFudGUgZGUgcmVjdXJzb3MgYSBwZXNhciBkZSBzdSBhZ290YW1pZW50by4gRXN0byBsbGV2YSBhbCBzaXN0ZW1hIGEgbGxlZ2FyIGEgdW4gZXF1aWxpYnJpbyBlbiBsYXMgdmFyaWFibGVzIGRlIGVzdGFkbyBgcG9wdWxhdGlvbmAgeSBgcmVuZXdhYmxlLnJlc291cmNlc2AsIGVuIGRvbmRlIGVsIGNyZWNpbWllbnRvIGRlIGxhIHBvYmxhY2nDs24gZXMgbWVuZ3VhZG8gcG9yIGxhIGRpc3BvbmliaWxpZGFkIGRlIHJlY3Vyc29zOyBwZXJvIG5vIGhheSBjb2xhcHNvcyBlbiBuaW5ndW5vIGRlIGxvcyBkb3MgY2Fzb3MgcHVlc3RvIHF1ZSBsYSBjYW50aWRhZCBkZSByZWN1cnNvcyBuYXR1cmFsZXMgdGllbmUgdW5hIG1lbm9yIGluZmx1ZW5jaWEgZW4gc3UgdGFzYSBkZSByZWdlbmVyYWNpw7NuLioNCg0KIVtdKGdyYWZpY2FzXzUzLnBuZykNCg0K